[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 87

 
FOReignEXchange:


好きなものを好きな人が手書きはみんな違う。もしかしたら、正しいかもしれませんが、ずさんだと思います。

私ならそんなやり方はしない。

まず、なぜそこで変数を宣言しなければならないのか、そこに何の意味があるのか、私にもよくわかりません。

次に、OrderSend関数の直後にPriceBuy = Ask;という行があります。そして、私が理解する限り、この関数の実行が終了すると同時に、計算が次の行にすぐに渡されます。Askの価格は変えられないと思う。プログラムの正常な動作に支障がなければ、文字数を減らして、何でもできるだけシンプルに書くように心がけています。私はあなたと同じように値を割り当てることができます、私はここで問題を見ません。最初に思いついたこと、一番簡単なことを書きました。

私は一度Pips Expert Advisorを書き、考慮すべき最低利益を5pipsとするコンテストに応募したことがあります。EAにTP=5, SL=10を設定して、散歩に出かけました。夕方帰宅し、端末を覗いてみてガッカリ。私のPips Expert Advisorはほとんどのトレードを利益で決済しましたが、そのうちのいくつかは4ポイントや3ポイントであり、私が必要としていた5ポイントではありませんでした。ちなみに、SLは10点ではなく、11点、12点ということもありました...。

なぜ?きっと、答えはわかっているはずです:D

ここでは、注文の開始価格として AskとBidの価格をカウントしないようにした実際の状況を示しています。1〜2点が自分にとって重要でない場合は、OKです。私にとって大切なのは、小さなことなのです。

 
MaxZ:

なぜダメなのか?きっと、答えはわかっているはずです:D

なーんだ。最初はスプレッドがカウントされないからだと思ったんです。

利益が6~7pipsになったトレードはありましたか?

 
FOReignEXchange:
なーんだ。最初、スプレッドが計算されていないからだと思いました。

くそ...自分の言葉を引用すると

MaxZ:

第三に、OrderSend 関数で Slippage を指定し、買い注文を出したい場合、OrderSend 関数で指定した取引注文の実行には一定の時間がかかり、価格がこの値から離れることがあるため、必ずしも Ask 価格で正確に注文を出すとは限りません。

そして、TPとSLをどのような価格価値に結びつけるのか。聞くには...価格は変更されましたが、TPとSLはどこにも移動していません。

 
MaxZ:

TPとSLをどのような価格帯に固定するか?聞くには...価格は変更されましたが、TPとSLはどこにも移動していません。

私のスペルが絶対に正しいという保証はありません。でも、必要なときはいつもこの方法でやっています。特に不具合は感じていません。

5pips以下の利益確定をしたあなたのケースについては、コードを拝見していないので何とも言えません。

 

でした。

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL =  Ask-StopLoss*Point;
   TP =  Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      Alert("Открыт ордер Buy ", Ticket, ".");
      Opn_B = False;
   }
   else
      Alert("Ошибка: ", GetLastError());
}

なった。

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL = Ask-StopLoss*Point;
   TP = Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         
         if (NormalizeDouble(OrderOpenPrice()-OrderStopLoss(), Digits) != NormalizeDouble(StopLoss*Point, Digits))
         {
            SL = OrderOpenPrice()-StopLoss*Point;
            TP = OrderOpenPrice()+TakeProfit*Point;
            
            Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
            if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
               Alert("Ордер Buy ", Ticket, " модифицирован.");
            else
               Alert("Ошибка: ", GetLastError());
         }
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}

原理はこうだ。でも、実はもう少し複雑なんです...。

何線?そうなんですか?:)))

 
MaxZ:

でした。

なった。

原理はこうだ。でも、実はもう少し複雑なんです...。

何線?そうなんですか?:)))


???理解できない。最初の例では、SLとTPはどこにあるのですか?
 
FOReignEXchange:

???理解できない。最初の例では、SLとTPはどこにあるのですか?

私は原理を示しただけです。よし、それなら追加されました。

MaxZ:

原理はこうだ。でも、実はもう少し複雑なんです...。

指定した価格で注文が開始されない場合、注文を修正する際にエラーが発生し、同じレーキに遭遇する可能性があります。そのため、実際にはTicketがプラスになる場合は、複数回注文を修正するようにしています...。ただ、すべてのコードをコピーするのは避けたい。面倒なんです。しかし、原理は述べている。
 
ああ、なるほどね。SLとTPはOrderSend関数の 前に立っています。もしかして、それが問題だったのでしょうか?
 
FOReignEXchange:
ああ、なるほどね。SLとTPはOrderSend関数の前に立っています。もしかして、それが問題だったのでしょうか?
何が問題なのでしょうか?SLとTPが計算されるまでに、価格は変化する時間があるのでしょうか?;)))
 
MaxZ:
それの何が問題なのでしょうか?SLとTPが計算されるまでに、価格が変化する時間はあるのだろうか?;))

OrderSend関数の 実行中に、価格が変化する可能性があることをお伝えしました。だから、すでに変化してしまったものを後から割り当てるしかない。