初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 58

 
teetrinker:

Myexpert.Time(10) は、チャート上の10本目のバーの時刻を返すべきでしょうか?また、どのように書けば正しいのか?

ありがとうございました。

理論的にはそうなのですが...。

Time メソッドは、ドキュメントによると、指定されたインデックスでTime要素の値を取得 します。これは CExpertBase クラスのメソッドで CExpertと 取引戦略のすべての補助クラスの基底クラスです。

Dearsergeev tells you correctly...Time()メソッドがEAの中でどのような役割を担っているかは、Debuggerで確認するのがベストです。

 

イェデルキンさん、ありがとうございました !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

そしてEnumToString(timeframe)、かっこいい関数ですね!!!!そして私はバラン!!!!!!!

 
教えてください、こんな機能があります。
 bool  PositionModify( ulong  PositionTicket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
      {  MqlTradeRequest request  = {0};
         MqlTradeResult result = {0};
        request.action= TRADE_ACTION_SLTP; 
        request.order= PositionTicket; 
        request.price= price;
        request.symbol= Symbol();
        request.sl= stoploss;
        request.tp= takeprofit;
        return (OrderSend( request,   result    ));   
      }

この関数は、 ,,側,,- request.symbol=Symbol(); なぜSymbol()なのでしょうか?ここで、TPとSLを設定したシンボルを転送する必要があります。では、バカみたいに文字列 request.symbol=Symbol(); を削除すればいいのでしょうか?

 

開いているメイン注文の ストップレベルでロールオーバー注文 を設定し、メイン注文が TPで閉じられたらそれを削除する方法を教えてください。

コードに両方の命令を一度に設定しました。

        
 // основной ордер +++++++++++++++++++++++++++++++++++++++      
        {
         request.action = TRADE_ACTION_PENDING;
         request.magic=magic_number;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = NormalizeDouble(volume()/1,2);
         request.price=NormalizeDouble(Ask+StopLevel*_Point,_Digits);
         request.sl = NormalizeDouble(request.price - SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price + TP*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_BUY_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         
           {
            OrderSend(request,result);
            if(result.retcode==10009 || result.retcode==10008)
               Print("Установлен ордер BuyStop");
            else
              {
               Print(ResultRetcodeDescription(result.retcode));
                           
              }
           }      
 // переворотный ордер +++++++++++++++++++++++++++++++++++++++
        
         request.action = TRADE_ACTION_PENDING;
         request.magic=magic_number1;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = NormalizeDouble(volume()/2,2);
         request.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits);
         request.sl = NormalizeDouble(request.price + SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price - (TP-900)*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_SELL_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         
           {
            OrderSend(request,result);
            if(result.retcode==10009 || result.retcode==10008)
               Print("Установлен ордер SellStop");
            else
              {
               Print(ResultRetcodeDescription(result.retcode));
               return;
              }
           }        
       } } 
}

メイン注文はTPでオープンしてクローズし、ロールオーバー注文はハングアップする。主注文がストップで決済されていれば問題ないのですが......)。閉じるのに最適な機能は何ですか?

そのように保留中の注文を調べて削除したほうがいいのでしょうか?

      {
         request.action = TRADE_ACTION_REMOVE;
         request.magic=magic_number1;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = 0;
         request.price=0;
         request.sl = 0;
         request.tp =0;
         request.deviation=0;
         request.type=0;
         request.type_filling=0;
         
           {
            OrderSend(request,result);
それとも、もっと簡単な方法があるのでしょうか?


	          
 
Crucian: メイン注文がTPでオープン&クローズし、ロールオーバー注文がハングする。主注文がストップで決済されていれば問題はなかったのですが......)。どのような機能で閉じるのが良いのでしょうか? 保留注文を調べて、そのように削除した方が良いのでしょうか?それとも、もっと簡単な方法があるのでしょうか?

そこで、あるイベントが発生したとき(特に、オープンポジションでTP注文がトリガーされたとき)、SL注文でもTP注文でもない保留中の注文を 具体的にどのように削除 するかが問題となります。

現在、このような注文は、該当する「保留中の注文の削除」要求を送信することによってのみ、強制的に削除することができます。そこで、端末側で特定のイベントの発生を監視し、リクエストを送信する必要があります。 しかし、あなたのバリアントとは異なり、リクエストで指定するフィールドは2つだけで、そのうちの1つはrequestです。の注文を受け付けて います。

おっしゃるような状況では、OCO注文("One Cansels Other(s)")が役に立つでしょう。TPレベルでは、オープンポジションの大きさで注文を出し、SLレベルでは、ポジションを「反転」させるのに必要な大きさで注文を出すことになるでしょう。これらのOCO注文のうち1つがトリガーされると、サーバー側で2つ目の注文が自動的に削除されます。しかし、このフォーラムの開催期間中、プラットフォームの開発者は、OCO注文を含む追加注文の種類を導入しないことを断固として表明しています。

 
Yedelkin:

しかし、このフォーラムが存在する限り、プラットフォーム開発者は、OCO注文を含む追加注文タイプの導入に断固として同意していません。

また、プログラム的に実装できるのに、なぜ導入するのか?
 
A100: プログラムでできるのに、なぜ入力するのか?
フォーラム検索でラテン語とキリル文字で「OCO」と入力して読んでみてください。
 
Yedelkin:
フォーラム検索でラテン語とキリル文字で「OCO」と入力して読んでみてください。
OCOは独立した令状ではないので、入力する必要はありません
 
A100: CCAは独立した令状ではないので、導入する必要はない
なるほど。だから、何も読んでいないんですね。しかし、あなたは自分の意見を伝えようとします。OK、あなたの意見は受け入れられます:このタイプの注文は 必要ありません
 
Yedelkin:
このような注文は 必要ありません。
プラットフォームによっては、1つ(場合によっては2つ)のCCA注文をバインドする機能があります。MT4/5では、リンクした注文の 連鎖をプログラムで実装しており(時には非常に複雑)、こちらの方が便利だと思います。
理由: