"ダミー "からの質問 - ページ 216

 
2 Yedelkin、私はエキスパートアドバイザーがちょうど眠ってしまい、動作を停止することをあなたに伝えました。起こすには端末を再起動するしかなく、うまくいきました。

2 sergeevさん、MQL5では、時計が止まると、眠ってしまったということになります。

 
Yedelkin: ...そして、明示的な遅延イベント 処理の最も単純な例として、再び無限ループに思考が戻ってくる。

ここで質問なのですが、トレードのリクエストを送るのに、どのような機能をお使いでしょうか?

G001 : 2 Yedelkin, Expert Advisorは単に眠ってしまって動かなくなると言ったんだ。しかも端末の再読み込みでしか起きないし、動くし。

とりあえず「動かなくなった」ように見える現象も含めて、すべてのものには理由と説明が必要なのです。

 
G001:
2 Yedelkin、私はエキスパートアドバイザーがちょうど眠ってしまい、動作しなくなることをあなたに伝えました。起こすには端末を再起動するしかなく、うまくいきました。

2 sergeevさん、MQL5では、時計が止まると、眠ってしまったということになります。

どのMQLイベント(EAのどの関数)で「眠ったときに捕まえる」のですか?
 
Yedelkin:

これは質問なのですが、トレードのリクエストを送る のに、どのような機能を使用していますか?

今のところ「動かなくなった」と思われる現象も含めて、すべてのことに理由と説明があるはずだ。

//+------------------------------------------------------------------+
//| Open Orders                                                      |
//+------------------------------------------------------------------+
// Perform analysis and open orders on new candle/bar 
  if((TradeNewBar != true)||(IsNewBar() == true))
  {
//----- Open BUY_STOP
    if(TrendDetection() == BULL && TotalBullStopOrders() < 1 && TotalBullPositions() < 1)
    {
      request.action = TRADE_ACTION_PENDING;
      request.magic = Magic;
      request.symbol = Symbol();
      request.volume = Volume();
      request.price=NormalizeDouble(Ask+OrderDrive*_Point,_Digits);
      request.sl = NormalizeDouble(request.price - StopLoss*_Point,_Digits);
      request.tp = NormalizeDouble(request.price + TakeProfit*_Point,_Digits);
      request.type=ORDER_TYPE_BUY_STOP;
      request.type_filling=ORDER_FILLING_RETURN;
      request.comment=Coments;
      int ResBull = -1;
      while(ResBull < 1)
      {
        if(OrderCheck(request,check))
        {
          ResBull = OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
      Print("BuyStop Order Set ");
      if(UseSound == true){PlaySound(OrderSound);}
      Print(ResultRetcodeDescription(result.retcode));
    }
//----- Open SELL_STOP
    if(TrendDetection() == BEAR && TotalBearStopOrders() < 1 && TotalBearPositions() < 1)
    {
      request.action = TRADE_ACTION_PENDING;
      request.magic = Magic;
      request.symbol = Symbol();
      request.volume = Volume();
      request.price=NormalizeDouble(Bid-OrderDrive*_Point,_Digits);
      request.sl = NormalizeDouble(request.price + StopLoss*_Point,_Digits);
      request.tp = NormalizeDouble(request.price - TakeProfit*_Point,_Digits);
      request.type=ORDER_TYPE_SELL_STOP;
      request.type_filling=ORDER_FILLING_RETURN;
      request.comment=Coments;
      int ResBear = -1;
      while(ResBear < 1)
      {
        if(OrderCheck(request,check))
        {
          ResBear = OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
      Print("SellStop Order Set ");
      if(UseSound == true){PlaySound(OrderSound);}
      Print(ResultRetcodeDescription(result.retcode));                             
    }
  }
 
sergeev:
どのMQLイベント(EAのどの関数)で「スリープ時にキャッチ」しているのですか?

すみません、何をおっしゃりたいのかよくわからないのですが...。:(

クロックはvoid OnTick() の直後です。

void OnTick()
{
  Comment("Local Time: "+TimeToString(TimeLocal(),TIME_MINUTES|TIME_SECONDS));
 
sergeev:
どのMQLイベント(EAのどの関数)で「眠ったときに捕まえる」のですか?
はい、Expert Advisorが「眠った」ことを視覚的に検出します。チャート上の コメントにある時間と自分の時間を比較します。イベントは一切使用しません。
 

EAの条件について、どなたか教えてください。

ポジションをクローズした 後、すぐに反対側のポジションで同じポジションをオープンするEAを作りたい。

例えば、売りと買いの2つのポジションしか開いていない場合。そのうちの1つがクローズされ、例えばTPまたはSLで買い、EAに買いポジションと新しい売りポジションを再開してほしい。

売りのポジションが2つ、買いのポジションが1つあります。

誰か、閉じたポジションを反対で開くような計算式を思いつきますように。

とか、他の方法とか...知ってることは全部試したんだけど((((;゚Д゚))))うまくいかない :,,(笑

ファイル:
SellBuY.mq4  3 kb
 
Yedelkin:
そう、エキスパートが "眠った "ことを視覚的に検知するのです。チャート上のコメントの 時刻と、そのコンピュータの時刻を比較します。イベントは一切使用しません。
そうですね。EAが動作しなくなった時に、プログラムで調べる方法はないのか、というのが私の要望でした。
 

G001 ResBear = OrderSend(request,result);

了解です。OrderSend() 関数を使用します。NewTick() 関数による OnTick() イベント処理の 遅れは、OrderSend() 関数がこの応答を待つ必要があるため、サーバーからの応答がないことが原因である可能性があるバージョンです。もし興味があれば、サーバーからの応答を待たないOrderSend() 関数の代わりに、その非同期コピーを使ってみて ください。Expert Advisorが動作しなくなるのでは?
 
Yedelkin:
了解です。OrderSend() 関数を使用しています。このバージョンは、OrderSend()関数がこの応答を待つ必要があるため、サーバーの無応答が原因で遅延が発生する可能性があります。もし興味があれば、サーバーからの応答を待たないOrderSend() 関数の代わりに、その非同期コピーを使ってみて ください。このケースにもぶら下がるのでしょうか?

ありがとうございます。非同期版も考えたのですが、ブローカーが取引を考慮してくれないのかわかりません。でも、やってみます。