如何通过MQL4 Expert Adviser发送HTTP请求?

时间:2016-09-07 12:20:41

标签: http mql4 mt4

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 );
   }

1 个答案:

答案 0 :(得分: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 );
}