[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 118

 

alex12 さん、申し訳ありませんが、ブルドーザー(悪気はないのですが、一般的な用語です)のように見えます。いろいろなパーツを組み合わせて何かを作り、どうにかコンパイルするのですが、そのコードの意味が理解できないのです。

サービスに連絡する働く

 
alex12:

エラーが大量に発生する


Igor Kimの関数のいくつかを使用する場合、コンパイラが教えてくれるあなたのコードに、彼の不足している関数があることを確認してください。彼のブランチでそれらを見つけて、あなたのコードに書き込んでください。
 
chief2000:
...

OrderOpenTime()はポジションがオープンされた時間を表示しますが、私の質問はSTOPオーダーが設定された時間を知るにはどうすればいいのでしょうか?
MT4のレポートではこの時間になっていますが、コードから調べることは可能でしょうか?


もう一度言います。

標準」サイクルですべてのストップオーダーを 調べ、自分自身のために、それらのOrderOpenTime()の値をアンプリントします - これは、それら(それぞれ)が設定された時間でなければなりません。以下は成行注文の例ですが、少し調整するか、この行を完全に削除してください。

if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;

または、興味のあるストップオーダーのデータに置き換える...。

int orderCount = 0; // сбрасываем счетчик ордеров 
      // ------------------------------------------------Считаем только наши ордера---------------------------
   int orderType;
   for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))     continue; // если ордер не выбран, то идем на следующий открытый
      if(OrderCloseTime()!=0) continue;                          // если тикет принадлежит закрытому ордеру, то берем следующий открытый
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))   continue;
      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))   continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера 
          Time = O rderOpenTime();
         
                     
         
      orderCount++;                     // считаем ордера (не больше i)           

    }   
 
Roman.:


もう一度言います。標準」ループですべてのストップオーダーを調べ、自分自身のために、それらのOrderOpenTime()の値をアンプリントします - これは、それら(それぞれ)が設定された時間でなければなりません。以下は成行注文の例ですが、少し調整するか、この行を完全に削除してください。

if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;

または、興味のある逆指値注文のデータに置き換える...。

ここで、この段階でジレンマが発生しました。ある「統計」のためにSTOPオーダーを開く時間が必要で、このプロセスを常に実行するのではなく、ある最終段階でだけ実行するようにしたいのです。そのため、その時点でオープンしている注文を検索する(OrdersTotal())のではなく、すでにクローズしている注文の中から検索する => OrdersHistoryTotal()となります。
しかし、すでに決済されているSTOP注文の場合、OrderOpenTime()は注文が発注された時刻ではなく、ポジションが開始された時刻を 返します。
結果、こうなりました。OrdersHistoryTotal()のリストから、STOP注文が成立した時刻を取り出すことは可能でしょうか?
 
chief2000:
ここでジレンマに陥りました。ある「統計」のためにSTOP注文の開始時間が必要なのですが、この処理を常時実行するのではなく、ある最終段階でのみ実行するようにしたいのです。そのため、その時点でオープンしている注文を検索する(OrdersTotal())のではなく、すでにクローズしている注文の中から検索する => OrdersHistoryTotal()となります。
しかし、すでに決済されているSTOP注文の場合、OrderOpenTime()は注文が発注された時刻ではなく、ポジションが開始された時刻を返します。
結果、こうなりました。OrdersHistoryTotal()のリストから、STOP注文が設定された時刻を取り出すことは可能でしょうか?

そうですね...課題は...わからない。できないようです。特に「最終段階」では...。

このプロセスを常に監視し、記録しておく必要があります。前ページのFAQの投稿を参照してください。

 
Roman.:

そうですね...課題は...わからない。できないようです。特に「最終段階」では...。

このプロセスを常に監視し、追跡する必要があります。前ページのFAQの投稿を参照してください。

他に解決策が見つからない場合は、OrdersTotal() からの注文を使用することにします。
とにかくありがとうございました。
 
その場合、ファイルへの書き込みが簡単で、手間もかからず、端末ではなく、必要な統計情報を整理することができます。
 
FAQ:
その場合、ファイルに書き込むのが簡単で、手間もかからず、統計もターミナルではなく、必要なように整理することができます。
ありがとうございました。
 

挟み撃ちパターンでExpert Advisorを書きたい のですが、どうすればいいですか?

私が選んだのは

Low2=Low[iLowest(NULL,0,MODE_LOW,10,2)]    
High2=High[iHighest(NULL,0,MODE_HIGH,10,2)]     

if(Low[1]==Low2) bull_pincet=true;
if(High[1]==High2) bear_pincet=true;

   while(true)
      {
       
       if(Total==0 && bull_pincet==true)
        {
         sl=Low[1];
         if(sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend(Symb,OP_BUY,Lts,Ask,3,sl,tp);
         return;
        }

        if(Total==0 && bear_pincet==true)
         {
          sl=High[1];
          if(sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
          OrderSend(Symb,OP_SELL,Lts,Bid,3,sl,tp);
          return;
         }
       break;
      }   

残念ながら、私の場合、'sl' が 100.00000 に設定され、'tp' がエラーを表示しているため、条件が間違っています。

1ティックを考慮する条件を追加することにしました。

static datetime TimeSaveH1  = 0;
int init()
{
     TimeSaveH1  = iTime( Symbol(), Period(), 0); // берем открытия время текущего бара
}

int start()
{
         if (TimeSaveH1!=iTime( Symbol(), Period(), 0))
            {
               TimeSaveH1=iTime( Symbol(), Period(), 0); 
            }  

Low2=Low[iLowest(NULL,0,MODE_LOW,10,2)]    
High2=High[iHighest(NULL,0,MODE_HIGH,10,2)]     

if(Low[1]==Low2 && TimeSaveH1===iTime( Symbol(), Period(), 0) bull_pincet=true;
if(High[1]==High2 && TimeSaveH1===iTime( Symbol(), Period(), 0) bear_pincet=true;
   while(true)
      {
       
       if(Total==0 && bull_pincet==true)
        {
         sl=Low[1];
         if(sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend(Symb,OP_BUY,Lts,Ask,3,sl,tp);
         return;
        }

        if(Total==0 && bear_pincet==true)
         {
          sl=High[1];
          if(sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
          OrderSend(Symb,OP_SELL,Lts,Bid,3,sl,tp);
          return;
         }
       break;
      }   




}

結果は同じです。

 
kilnart:

PincerパターンでExpert Advisorを書きたいのですが、どうすればいいですか?

私が選んだのは

残念ながら、私の場合、'sl' が 100.00000 に設定され、'tp' がエラーを表示しているため、条件が間違っています。

1ティックを考慮する条件を追加することにしました。

結果は同じです。 どうすれば正しく解決できますか?

Step=100という変数があるのですね。もしそうなら、さらにコードの中で何が得られるか見てみましょう。