0

LI は、MQL4 Expert Adviser を介して http リクエストを送信するコードを発見し、それを私の個人的な EA ロジック用に修正しました。

技術的には機能しますが、ティックごとにリクエストを送信するという大きな問題があります。シグナルごとに 1 つのリクエストに変更する必要があります。

それを解決するために私を助けてください!

コード例:

#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 に答える