MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 880

 
Mikhail Rudyk:

ロボットはこのチャートの上に立つだけですが、ロボットと同じオプションを取引します。

この行を挿入してください。

void Open(int lot,string comment)
   {
               bool eror=false;
               int step=0;
               if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)==1)
                  {
                           while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 eror=Trade.Buy(lot,symbolName,bid,0,0,comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)Print("error - ",GetLastError());
                              }
                  }
   }
 

置く

が、エラーをリセットしても 解決しないような気がします。

 
Mikhail Rudyk:

が、エラーをリセットしても解決しないような気がします。

また

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

void Open(int lot,string comment)
   {
               bool eror=false;
               int step=0;
               if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)==1)
                  {
                           while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 // eror=Trade.Buy(lot,symbolName,bid,0,0,comment); // закомментировать
                                 eror=OrderSend(symbolName, OP_BUY, lot, bid, 0, 0, 0, comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)Print("error - ",GetLastError());
                              }
                  }
   }
 

すでにやっていて効果がありました。

しかし、エラーの事実はまだ解明されていない。

おせわになりました

while(eror==false&&step<10)
{
double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
ResetLastError()。
eror=トレード。買い(ロット、シンボル名、ビッド、0、0、コメント)。
step++です。
Sleep(200)です。
if(eror==false)
{
Print("エラー - ",GetLastError());
if(GetLastError()==4754){OnInit();}.
}
}

 
Mikhail Rudyk:

エラーの事実が未解決であること。

だから、この選択肢 を提案したのです。

 
fxsaber:

だから、この選択肢 を提案したのです。

まあ、やってみるか。

しかし、なぜ標準クラスではうまくいかないのでしょうか?

 
Mikhail Rudyk:

まあ、やってみるか。

しかし、なぜ標準クラスではうまくいかないのでしょうか?

代替図書館がうまくいけば、どこを掘ればいいかが明らかになる。

各ライブラリで問題が再現されない。

 
Mikhail Rudyk:

すでにやっていて効果がありました。

while(eror==false&&step<10)
{
double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
ResetLastError()。
eror=トレード。買い(ロット、シンボル名、ビッド、0、0、コメント)。
step++です。
Sleep(200)です。
if(eror==false)
{
Print("エラー - ",GetLastError());
if(GetLastError()==4754){OnInit();}.
}
}

これではうまくいかないはずです。4754は、OrdersTotalが0より大きい場合に発生しますが、OrderSelectやOrderGetTicketは台無しになります。

これは非常に稀なことですが、今回は違います。ここはサーバー/シンボルが特殊なので、ポジションでも同じことが起こり、エラー4753になるだけです。

すでに、代替バイブルに調整を加えなければならない事態が発生しており、多くの論理を引っ張り出してくることを覚悟している。そこで成行注文を出すと、それがサーバーに届き、同じミリ秒の間にポジションを作り、決済する。そして、端末はPingのために情報を遡及的に受信する。

すべてが完璧に機能することに、私はとても驚きました。


サーバー/シンボル自体はdodosil、エラーは発生しませんでした。


SZY ポーズは手動で開くことはできず、MQLを通してのみ開くことができます。

 

ロボットがハングアップしないのが助かるという意味です。

 
Mikhail Rudyk:

ロボットがぶら下がらないようにするためという意味です。

次にOnInitを表示します。今はナンセンスに見える。