Mql4 专家顾问不是开盘交易
我试图在mql4中创建一个EA,它根据给定的条件打开和关闭交易头寸,但它不是在匹配条件后打开交易,EA一直工作到显示买入和卖出的信号,之后什么也没有发生。我如何调试这个Mql4 专家顾问不是开盘交易,mql4,algorithmic-trading,metatrader4,forex,Mql4,Algorithmic Trading,Metatrader4,Forex,我试图在mql4中创建一个EA,它根据给定的条件打开和关闭交易头寸,但它不是在匹配条件后打开交易,EA一直工作到显示买入和卖出的信号,之后什么也没有发生。我如何调试这个 void CloseBuyPosition() { 对于(int i=OrdersTotal()-1;i>=0;i--) { 订单选择(i,按订单选择,模式交易); 字符串Cp=OrderSymbol(); 如果(_Symbol==Cp) if(OrderType()==OP_BUY) { OrderClose(OrderTic
void CloseBuyPosition()
{
对于(int i=OrdersTotal()-1;i>=0;i--)
{
订单选择(i,按订单选择,模式交易);
字符串Cp=OrderSymbol();
如果(_Symbol==Cp)
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,NULL);
}
}
}
void closellposition()
{
对于(int i=OrdersTotal()-1;i>=0;i--)
{
订单选择(i,按订单选择,模式交易);
字符串Cp=OrderSymbol();
如果(_Symbol==Cp)
if(OrderType()=OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,NULL);
}
}
}
void OnTick()
{
字符串信号=”;
双Sar=iSAR(_符号,_周期,0.02,0.2,0);
如果(Sar<低[1]&打开[1]<关闭[1])
{
信号=“购买”;
}
如果(Sar>高[1]&打开[1]>关闭[1])
{
signal=“销售”;
}
如果(信号==“购买”&&OrdersTotal()==0)
OrderSend(_-Symbol,OP_-BUY,0.01,Ask,3,20,100,NULL,0,0,绿色);
如果(信号==“销售”&&OrdersTotal()==0)
OrderSend(_符号,OP_SELL,0.01,Bid,3,20,100,NULL,0,0,红色);
注释(“信号为:”,信号);
如果(打开[1]>关闭[1]&&OrdersTotal()>0)
CloseBuyPosition();
如果(打开[1]<关闭[1]&&OrdersTotal()>0)
闭合位置();
}
第0步:检查您的EA是否在MetaTrader4终端内启动,并具有实际交易的有效权限 步骤1:
检查代码,至少有一些基本的自我调试工具(
GetLastError()
和Print()
比间歇性和自我破坏要好得多,即内部的历史GUI文本深度为零,但最后可见的注释()
第2步:分析日志,其中所有打印的详细信息将帮助您追踪根本原因(经纪人拒绝、封闭市场、有缺陷的价格水平以及导致
OrderSend()
-调用被拒绝的许多可能原因)
intordersend(字符串符号,//symbol
int cmd,//操作
双卷,//卷
双倍价格,//价格
int滑移,//滑移
双止损,//止损关闭[1])信号=“卖出”;
如果(信号==“购买”&&OrdersTotal()==0)OrderSend(_-Symbol,OP_-buy,0.01,Ask,3,20,100,NULL,0,0,绿色);
如果(信号==“卖出”&&OrdersTotal()==0)OrderSend(_-Symbol,OP_-sell,0.01,Bid,3,20,100,NULL,0,0,红色);
注释(“信号为:”,信号);
if(打开[1]>关闭[1]&&OrdersTotal()>0)CloseBuyPosition();
如果(打开[1]<关闭[1]&&OrdersTotal()>0)关闭sellposition();
*/
NOPs的静态整数计数=0;
if(OrdersTotal()==0)
{如果(打开[1]<关闭[1]
&&低[1]>iSAR(_符号,_周期,0.02,0.2,0)
) {
int rc=orderssend(_-Symbol,OP_-BUY,0.01,Ask,3,20,100,NULL,0,0,绿色);
打印(StringFormat(“没有订单处于活动状态…尝试过OrderSend(OP#u BUY)->结果RetCode(tkt#))==%d[yield GetLastError()=%d],
rc,
GetLastError()
)
);
NOPs的计数=0;//-----------------------------------。重置
返回;//--------------------------------------^J.I.T./RET
}
如果(打开[1]>关闭[1]
&&高[1]生成的RetCode(tkt#))==%d[yield GetLastError()==%d],
rc,
GetLastError()
)
);
如果()
NOPs的计数=0;//-----------------------------------。重置
返回;//--------------------------------------^J.I.T./RET
}
/*否则:*/
打印(StringFormat(“没有激活的订单…没有…(用于%d次)”,
++不可数
)
);
// */
}
其他的
{if(Open[1]>Close[1]){Print(StringFormat)(“激活%d个订单…将尝试CloseBuyPosition()…”,
OrdersTotal()
)
);
CloseBuyPosition();
计数\u NOPs=0;//-------------。重置
返回;//-------------------------^J.I.T./RET
}
如果(打开[1]<关闭[1]){Print(StringFormat)(“激活%d个订单…将尝试CloseSellPosition()…”,
OrdersTotal()
void OnTick()
{
string signal = "";
double Sar = iSAR(_Symbol, _Period, 0.02, 0.2, 0);
if (Sar < Low[1] && Open[1] < Close[1])
{
signal = "buy";
}
if (Sar > High[1] && Open[1] > Close[1])
{
signal = "sell";
}
if (signal == "buy" && OrdersTotal() == 0)
OrderSend(_Symbol, OP_BUY, 0.01, Ask, 3, 20, 100, NULL, 0, 0, Green);
if (signal == "sell" && OrdersTotal() == 0)
OrderSend(_Symbol, OP_SELL, 0.01, Bid, 3, 20, 100, NULL, 0, 0, Red);
Comment("The Signal is :", signal);
if (Open[1] > Close[1] && OrdersTotal() > 0)
CloseBuyPosition();
if (Open[1] < Close[1] && OrdersTotal() > 0)
CloseSellPosition();
}
int OrderSend( string symbol, // symbol
int cmd, // operation
double volume, // volume
double price, // price
int slippage, // slippage
double stoploss, // stop loss <------------ PRICE-DOMAIN levels, not INT-s
double takeprofit, // take profit <---------- PRICE-DOMAIN levels, not INT-s
string comment = NULL, // comment
int magic = 0, // magic number
datetime expiration = 0, // pending order expiration
color arrow_color = clrNONE// color
);
void OnTick()
{
/* string signal = "";
double Sar = iSAR( _Symbol, _Period, 0.02, 0.2, 0 );
if ( Sar < Low[1] && Open[1] < Close[1] ) signal = "buy";
if ( Sar > High[1] && Open[1] > Close[1] ) signal = "sell";
if ( signal == "buy" && OrdersTotal() == 0 ) OrderSend( _Symbol, OP_BUY, 0.01, Ask, 3, 20, 100, NULL, 0, 0, Green );
if ( signal == "sell" && OrdersTotal() == 0 ) OrderSend( _Symbol, OP_SELL, 0.01, Bid, 3, 20, 100, NULL, 0, 0, Red );
Comment( "The Signal is :", signal );
if ( Open[1] > Close[1] && OrdersTotal() > 0 ) CloseBuyPosition();
if ( Open[1] < Close[1] && OrdersTotal() > 0 ) CloseSellPosition();
*/
static int count_of_NOPs = 0;
if ( OrdersTotal() == 0 )
{ if ( Open[1] < Close[1]
&& Low[1] > iSAR( _Symbol, _Period, 0.02, 0.2, 0 )
) {
int rc = OrderSend( _Symbol, OP_BUY, 0.01, Ask, 3, 20, 100, NULL, 0, 0, Green );
Print( StringFormat( "HAVING NO ORDERS ACTIVE... DID TRY OrderSend( OP_BUY ) -> RESULTING RetCode ( tkt# ) == %d [yield GetLastError() == %d]",
rc,
GetLastError()
)
);
count_of_NOPs = 0; //------------------------------ .RESET
return; //------------------------------------------^ J.I.T./RET
}
if ( Open[1] > Close[1]
&& High[1] < iSAR( _Symbol, _Period, 0.02, 0.2, 0 )
) {
int rc = OrderSend( _Symbol, OP_SELL, 0.01, Bid, 3, 20, 100, NULL, 0, 0, Red );
Print( StringFormat( "HAVING NO ORDERS ACTIVE... DID TRY OrderSend( OP_SELL ) -> RESULTING RetCode ( tkt# ) == %d [yield GetLastError() == %d]",
rc,
GetLastError()
)
);
if ( )
count_of_NOPs = 0; //------------------------------ .RESET
return; //------------------------------------------^ J.I.T./RET
}
/* OTHERWISE: */
Print( StringFormat( "HAVING NO ORDERS ACTIVE... DID NOP... (for %d time)",
++count_of_NOPs
)
);
// */
}
else
{ if ( Open[1] > Close[1] ) { Print( StringFormat( "HAVING %d ORDERS ACTIVE... WILL TRY CloseBuyPosition()...",
OrdersTotal()
)
);
CloseBuyPosition();
count_of_NOPs = 0; //---------- .RESET
return; //----------------------^ J.I.T./RET
}
if ( Open[1] < Close[1] ) { Print( StringFormat( "HAVING %d ORDERS ACTIVE... WILL TRY CloseSellPosition()...",
OrdersTotal()
)
);
CloseSellPosition();
count_of_NOPs = 0; //---------- .RESET
return; //----------------------^ J.I.T./RET
}
/* OTHERWISE: */
Print( StringFormat( "HAVING %d ORDERS ACTIVE... DID NOP... (for %d time)",
OrdersTotal(),
++count_of_NOPs
)
);
// */
}