どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 102

 
Dozol:


ロジャー、理解できないよ!?

チャート上に水平線を引き、その価格を固定し、線を削除する - それはもはや必要ではありません。すぐにその値段で注文をセットした。

何が間違いなのか?また、なぜSell Stopが開かないのでしょうか?

水平線の価格値だけが必要なのに、なぜ価格を追い続けるのですか?

説明しろ!!!助けてもっと詳しくお願いします

Sellstopは間違っていた、開きます。

さて、セリフについてです。ライブで取引するときは、チャートを見て水平線を 置き、条件が合えば、線を消して注文を出す。単純なホットキースクリプトより優れている点は?テスターで、線を引くには、可視化を有効にして、チャートを観察する必要があります。なぜテスターに追加しなければならないのかも理解できない。

 
borilunad:
ごめんなさい!そして、おまるで寝てしまいましょう良い朝をお迎えください。;)
なるほど。自分で考えてみるよ、解けない謎ではないよ。でも、今のところ松葉杖しか思いつかないんです。松葉づえ方式はよくない...。
 
良い人、何が悪いか教えてください。0バーの最初のティックで開く売り取引では、損切りは 最初のローソクの高値から30ピップ(5桁)上に設定する必要があります。このように書いたが、ストップロスは全く設定されていない。
     Price = NormalizeDouble(Bid, Digits); // округляем до нужного нам числа цифр после запятой
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
     {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL= Price + StopLoss*Point;
       SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
      }
 
artmedia70:

指には?時間と値段でテイクオフがわかるのか?確かに自分で考えてもいいのですが、今は朝の7時43分で、まだ寝ていないんです。


もし7時43分になっても寝なかったら...。ということで、grailと させていただきます!
 
alexey1979621:
優秀な人たちよ、何が問題なのか教えてくれ。0バーの最初のティックで開く売り取引では、損切りは最初のローソクの高値から30ピップ(5桁)上に設定する必要があります。そう書いたが、ストップロスが全く置かれていない。

StopLoss = iHigh(Symbol(),0,1)+30*Point;

これは、例えば、1.5000+30*0.00001 = 1.5003のように、希望するストップロスのレベルです。


SL= Price + StopLoss*Point; 
他になぜPriceに StopLoss*Pointを 加えるのか(1.5003*0.00001=0.000015)。SLがPriceとほぼ等しくなるため、StopLossが設定されない。
 
ストップロスはまだ設定されていませんが、テイクプロフィットは機能しています。ストップロス、テイクプロフィットコードを 添付
Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
artmedia70:
1.最後に閉じた位置(MODE_HISTORY)を探します。
2.テイクアウトで閉店した場合(または閉店に近い場合)→開店時間を覚えておく→。
3.すべてのオープンポジション(MODE_TRADES)を見て、オープン時間を記憶しているものと比較する --> マークが閉じたポジションのオープン時間(ポイント2)が他のオープンポジションのオープン時間から最も長い場合、最後のオープンポジションがマークによって閉じられたことを意味します --> マークが閉じたポジションのオープン時間(ポイント3)を記憶する。
4.残りはすべてトリミング/削除。


ふむふむ、書いてあるようですね。しかし、その結果は同じではありません。

私の場合は、こんな感じで出てきました。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTMarket = -1,          // Время открытия последнего открытого ордера рыночного
            lastOOTHist = -1;            // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0);
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
   
   Comment("Время открытия последнего открытого ордера = ", lastOOTHist);
  
   for (int h=OrdersTotal()-1; i>=0; i--)
   {   
      if (!OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      {
         if (lastOOTMarket < OrderOpenTime())
             lastOOTMarket = OrderOpenTime();
  
         if (lastOOTMarket < lastOOTHist)      // Если время открытия последнего открытого ордера (рыночного) ниже последнего открытого ордера из истории..
             lastOrderCloseTime = OrderCloseTime(); // Значит это искомый ордер
      }
   }

   Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}
 
alexey1979621:
良い人、何が悪いか教えてください。0バーの最初のティックで開く売り取引では、損切りは最初のローソクの高値から30ピップ(5桁)上に設定する必要があります。このように書きましたが、ストップロスは全く配置されていません。

ここにあるのは、まったく何もない。まず、ショートのクローズはBIDではなく、常にASCで行われるという事実から始めましょう。
 
alexey1979621:
ストップロスはまだ設定されていませんが、テイクプロフィットは機能しています。ストップロス、テイクプロフィットコードを添付

Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1))               // Здесь еще STOPLEVEL нужно проверять, иначе частые ошибки будут
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;  // Здесь вместо переменной StopLoss попробуйте поставить SL
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
hoz:


ふむ。書かれているようです。でも、出力がおかしい...。

これが、私が手に入れたものです。

最後に閉じた注文を 検索する場合、最新のものが最初に見つかるはずですが、takeで閉じるかどうかのチェックはループから外すべきです。そうしないと、すべての閉じた注文が takeで閉じるかどうかをチェック し、もしそうなら、最新のものでなく、ループ内の最初にtakeで閉じたものの時刻を記憶することになります。
理由: