因此,如果我想要一个MQL4
采用开盘价的 EA,当当前价格低于开盘价 10 点时,它会下一个买单,当它比开盘价高出 10 个点时,它会卖出。一次只有一个订单,并且每天都在变化。
Q1:这怎么可能不间断?
Q2:这还能盈利吗?
我知道这对某些人来说很简单,但对我来说却令人沮丧。
因此,如果我想要一个MQL4
采用开盘价的 EA,当当前价格低于开盘价 10 点时,它会下一个买单,当它比开盘价高出 10 个点时,它会卖出。一次只有一个订单,并且每天都在变化。
Q1:这怎么可能不间断?
Q2:这还能盈利吗?
我知道这对某些人来说很简单,但对我来说却令人沮丧。
代码类型的执行原则上可以不间断地运行,假设执行引擎正在不间断地运行。虽然仍有周末可用于服务和维护任务,但 EA 代码本身可以无限长地运行,具有自动重入安全重新启动自我保护的状态完全 ( )。MQL4
Expert AdvisorMetaTrader Terminal 4OnInit(){...} + OnDeinit(){...}
#property copyright "Copyright © 1987-2016 [MS]"
#property link "nowhere.no"
#property version "0.00"
#property strict
extern int minDist2XTO = 10; // A minimum Distance To XTO
bool aGlobalMUTEX_LOCKED = False; // LOCK "only one order at a time"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{ // on-launch intialisation tasks go here:
return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit( const int reason )
{ // pre-exit sanitisation tasks go here:
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{ // MAIN: this is being executed upon each anFxMarketEVENT's arrival
// GoLONG();
// GoSHORT();
}
//+------------------------------------------------------------------+
//| Tester function |
//+------------------------------------------------------------------+
double OnTester()
{ // back-testing utility calculation functions go here:
double retVal = 0.0;
return( retVal );
}
//+------------------------------------------------------------------+
void GoLONG()
{ // SELF-CONTROLLABLE ( might even get concurrently run in parallel to GoSHORT on dual resources )
// -------------------------------------------------------------------------------------------------------
static bool aNewBarEVENT = FALSE;
static int aLastBAR = EMPTY,
aCurrBAR = EMPTY;
static double GoLONG_LEVEL = EMPTY;
// -------------------------------------------------------------------------------------------------------
// TEST A STATE-SHIFT
RefreshRates();
aCurrBAR = iBars(_Symbol, PERIOD_D1 );
if ( aLastBAR != aCurrBAR )
{ aLastBAR = aCurrBAR; // .SET
aNewBarEVENT = TRUE; // .FLAG
// ----------------------- // .RESET in-BAR-registers
GoLONG_LEVEL = NormalizeDouble( iOpen( _Symbol, PERIOD_D1, 0 )
- minDist2XTO * _Point
);
// ----------------------
}
else
{ aNewBarEVENT = FALSE; // !FLAG
}
if ( !aGlobalMUTEX_LOCKED
&& Ask <= GoLONG_LEVEL
)
{
// XTO ... // .XTO
if ( success ) aGlobalMUTEX_LOCK = True;
}
}
//+------------------------------------------------------------------+
void GoSHORT()
{ // SELF-CONTROLLABLE ( might even get concurrently run in parallel to GoLONG on dual resources )
...
..
.
}
这个问题可以定量地解决。您的交易想法可以在真实市场数据上进行测试和验证,从而提供合理数量的观察结果,支持或限制预期的表现。
如果没有来自市场季节性不规则性的足够 TimeDOMAIN 跨度的定量数据,这个问题就无法得到合理支持的定量答案 (除了只是一种意见)。
这远远超出了 Q/A 的 StackOverflow 格式,但原则上,回测(支持内置的double OnTester(){...}
后处理设施机制)和前向测试(支持模拟账户正向运行)都是用于量化建模,在任何真正的交易策略被暴露以执行任何真正的市场风险之前。