Algorithmic trading 回溯测试时的空白结果
我是MQL4代码的新手 <>我来自C++背景,我正在努力学习MQL4语言和约定。 我写了一个简单的专家顾问,这是我有史以来的第一次。它可以编译,但是,当我尝试测试它时,它没有结果。我附加代码以更好地说明我正在尝试做的事情:Algorithmic trading 回溯测试时的空白结果,algorithmic-trading,mql4,forex,Algorithmic Trading,Mql4,Forex,我是MQL4代码的新手 我来自C++背景,我正在努力学习MQL4语言和约定。 我写了一个简单的专家顾问,这是我有史以来的第一次。它可以编译,但是,当我尝试测试它时,它没有结果。我附加代码以更好地说明我正在尝试做的事情: //+------------------------------------------------------------------+ //| MyFirstExpert.mq4
//+------------------------------------------------------------------+
//| MyFirstExpert.mq4 |
//| Leonardo |
//| http://investinmarkets.altervista.org |
//+------------------------------------------------------------------+
#property copyright "Leonardo "
#property link "http://investinmarkets.altervista.org"
#property version "1.00"
#property strict
input int BarCount = 3;
int Ticket = 0;
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick() {
int BarCountTemp = BarCount + 1;
double bars[];
ArrayResize( bars, BarCountTemp );
for ( int i = 0; i < BarCountTemp; i++ ) {
bars[i] = Close[i + 1];
}
int i = 0;
bool is_p;
do
{
if ( bars[i] > bars[i+1] && i < BarCountTemp ) is_p = true;
else is_p = false;
i++;
}
while ( is_p );
if ( is_p == true && Ticket == 0 ) {
Ticket = OrderSend(_Symbol,OP_SELL,0.1,Bid,0,0,0,"Sell Order Custom",110);
Alert("Sell order opened to match found.");
Comment("Sell order opened #"+Ticket+".");
}
if ( Ticket != 0 ) {
bool select = OrderSelect(Ticket,SELECT_BY_TICKET);
if ( Close[1] > Close[2] ) {
bool close = OrderClose(Ticket,OrderLots(),Ask,0,clrGreen);
Alert("Sell order closed.");
Comment("Sell order closed #"+Ticket+".");
Ticket = 0;
}
}
}
//+------------------------------------------------------------------+
我只想简单地计算用户输入的条数,然后进行检查:例如,如果3条条都是正数,则打开一个销售订单,目前仅此情况。如果开盘,下一栏检查是否仍为正值,如果未成交
我总是得到空白的结果
提前谢谢你 欢迎来到MQL4世界,莱昂纳多
让我们回顾一下语法:
for ( int i = 0; i < BarCountTemp; i++ ) {
bars[i] = Close[i + 1];
}
int i = 0;
bool is_p;
do
{
if ( bars[i] > bars[i+1] && i < BarCountTemp ) is_p = true;
else is_p = false;
i++;
}
while ( is_p );
最后:为可能出现错误的情况包括异常处理程序
谢谢@user3666197!谢谢你的回答。我试图通过MQL4中C++背景下的“可以/不能正确”来练习,但比我预期的要简单。此外,我非常喜欢MQL4中的代码组织方式。再次感谢你!很高兴听到你说,莱昂纳多,你越喜欢这个密码。是的,在低强度HFT中,必须尽可能减少纳秒,因此代码纯度和值的重复使用非常有帮助。在运行时,要尽可能降低处理延迟。有些功能甚至可以更好地从MQL4到GPU,到云/网格,以便更快地实现。我同意。我已经在许多大学学习了多年,这就是我希望实际做的事情!我很高兴能找到一个有时在对StackOverflow感到困惑时能提供帮助的人!再次感谢你!
bool is_p = True; // FYI: FALSE if not initialised
// WARNING: "New"-MQL4 has changed variable visibility-scope to be limited just to the innermost syntax-construct and variables easily "cease" exist outside that syntax-construct boundary ... for(){bool is_p ...visible...} ...invisible...
for ( int i = 0; // .SET
i < BarCountTemp; // .TEST: [**]
i++ ) { // .INC
if ( Close[i+1] > Close[i+2] // avoid TimeSeries' replica(s)
// && i < BarCountTemp // ALWAYS TRUE [^**]
) continue; // ---------------------------- LOOP-^
else {
is_p = False;
break; // ---------------------------- EXIT-v
}
int Ticket = EMPTY; // Rather initialise as = EMPTY;
if ( is_p == True
&& Ticket == EMPTY // un-ambiguous meaning
) {
Ticket = OrderSend( _Symbol, // .SYM
OP_SELL, // .OP
0.1, // .LOTs check sizing, MarketInfo()
Bid, // .PRICE
0, // .SLIPPAGE
0, // .SL
0, // .TP
"Sell Order Custom",// .COMMENT
110 // .MAGNUM
);
if ( Ticket == EMPTY ){ // EXC. HANDLER
...
}
else {
Alert( "Sell order opened to match found." ); // .NOP if isTesting()
Comment( "Sell order opened #" + Ticket + "." ); // .GUI is visible????
}
}
if ( Ticket != EMPTY // TEST 1st,
&& Close[1] > Close[2] // TEST 2nd, prevent dbPool-ops, if not True
) {
bool select = OrderSelect( Ticket, SELECT_BY_TICKET );
if (!select ){ // EXC. HANDLER
...
}
bool close = OrderClose( Ticket,
OrderLots(),
Ask,
0,
clrGreen
);
if (!close ){ // EXC. HANDLER
...
}
Alert( "Sell order closed." );
Comment( "Sell order closed #" + Ticket + "." );
Ticket = EMPTY; // .SET EMPTY
}
}