0

LI 找到了一个通过 MQL4 Expert Adviser 发送 http 请求的代码,并针对我的个人 EA 逻辑对其进行了修改。

从技术上讲,它可以工作,但是有一个很大的问题,它会在每个滴答声中发送请求。我需要将其更改为 - 每个信号一个请求。

请帮我解决它!

代码示例:

#import    "shell32.dll" // -------------------------------<BegOfImport>-section

int ShellExecuteW( int    hwnd,
                   string lpOperation,
                   string lpFile,
                   string lpParameters,
                   string lpDirectory,
                   int    nShowCmd
                   );

#import // "shell32.dll" // -------------------------------<EndOfImport>-section


if (  A > B
   && 1 > OrdersTotal()
      )
{
   if (  OrderSend( Symbol(), OP_SELL, 1, Bid, 10, 0, 0, 0, 0, 0, clrGreen )
         )
         OrderSelect( 0, SELECT_BY_POS, NULL );
   ShellExecuteW( 0, "open", linkS, "", "", 1 );
   }
4

1 回答 1

0

那么交易呢?

EA 是否会在每个报价时发送交易请求?

目前它尝试发送交易(不能保证,即重新报价或滑点或市场关闭/交易禁用等)

如果您需要每个新信号 - 想想也许您需要检查每个新柱,或者将最近的交易方向保存在内存中,或者将最近的信号时间保存在内存中。

void OnTick(){ 
   if (  A > B && OrdersTotal() < 1 ){
         int ticket = OrderSend( Symbol(),OP_SELL,1,Bid,10,0,0,0,0,0,clrGreen );
         if (  ticket > 0 ){ // this means ticket is opened successfully, OrdersTotal = 1
               if (  OrderSelect( 0, SELECT_BY_POS ) ) { } // for what???
         ShellExecuteW( 0, "open", linkS, "", "", 1 );
      }
   }
}  

在这种情况下,如果ticket打开,则ShellExecute()调用,在其他情况下 - 不是。

不知道你为什么,也许是为了止损OrderSelect()ticket

无论如何,您还应该找出它被拒绝的原因,以防万一

int   ticket  = OrderSend( Symbol(), OP_SELL, 1, Bid, 10, 0, 0, 0, 0, 0, clrGreen );
if (  ticket >  0 ){

}else{
   int error = GetLastError();
   Print( " failed to send. error#", error );
}
于 2016-09-09T12:44:52.293 回答