if(OrderType()==OP_SELL && OrderSymbol()==Symbol()) { if (OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); } if((OrderOpenPrice()-Ask)>(Point*TrailingStop) ) { if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) Print("Error_Modify - ",GetLastError()); else str=StringConcatenate(")です。\n My ticket number is ", OrderTicket(), " and mystop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // new code } }. } } if(OrderType()==OP_BUY && OrderSymbol()==Symbol()) { if (OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); }
if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss() <Bid-Point*TrailingStop-Point)・・・ { if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green)) Print("Error_Modify - ",GetLastError()); else str=StringConcatenate(")。\n My ticket number is ", OrderTicket(), " and my stop loss setting is ", DoubleToStr(Bid-Point*TrailingStop,Digits)); // new code }
{ if (OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // TPとSLを置く } if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // TPを置く。// TPを置く { if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // チェックトゥルー { if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // if true modify order Print("Error_Modify - ",GetLastError()); else str=StringConcatenate("\n My ticket number is ", OrderTicket(), " and mystop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // new code } } }. } }
残りは正しいようです。 { if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // if true オーダーを修正する。 Print("Error_Modify - ",GetLastError())。 else str=StringConcatenate("\n My ticket number is ", OrderTicket(), " and my stop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // new code } } }
以下は、MQ EA MACD Sample.mq4のトレーリングストップの例です。
// check for trailing stopif( TrailingStop>0){if((OrderOpenPrice()-Ask)>(Point* TrailingStop)){if((OrderStopLoss()>(Ask+Point* TrailingStop))||(OrderStopLoss()==0)){OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point* TrailingStop,OrderTakeProfit(),0,Red);return(0);}}}
SeawolfとRuptorが言っていることは、はっきり言って間違いありません。
OP_BUY注文の場合、Ask価格を使ってエントリー価格とストップを設定するのは全く正しいことです。
実は、SeawolfとRuptorは正しいのです。
ロング注文はASK 価格でエントリーし、BIDで エグジットするのですが、売り注文の場合はその逆です。ストップロスやテイクプロフィットは出口なので、ロングオーダーでそれらを計算するにはBID 価格を使用する必要があります。
これはかなり一般的な混乱で、特にASKと BIDの 価格にあまり差がないため、小さなスプレッドを扱うときに見落としがちなポイントです。ストップやスリッページがきつくない場合は、このコードでうまくいくこともありますが、スキャルピングや精度が必要なことを行っている場合は、以下のガイドラインを使用して、適切な価格を入力する必要があります。 そして 出口
-
ロング・オーダー、つまりOP_BUY、OP_BUYSTOP、またはOP_BUYLIMITの 場合。
開始価格 =ASK
出口価格(損切り、利食い、またはOrderClose(...)) =BID
-
ショート注文、すなわちOP_SELL、OP_SELLSTOP、またはOP_SELLLIMITの 場合。
開始価格 =BID
出口価格(損切り、利食い、またはOrderClose(...)) =ASK
-
トヴァン
実は、SeawolfとRuptorが正しいのです。
ロング注文はASK 価格で入力し、BIDで 終了します。売り注文の場合はその逆です。ストップロスやテイクプロフィットは出口なので、ロングオーダーでそれらを計算するにはBID 価格を使用する必要があります。
これは、特にASKと BIDの 価格にあまり差がないため、小さなスプレッドを扱うときに見落とされがちな、かなり一般的な混乱するポイントです。ストップとスリッページがきつくない場合は、このコードでうまくいくこともありますが、スキャルピングや精度が必要なことを行っている場合は、以下のガイドラインを使用して、適切な価格を入力する必要があります。 そして 出口
-
ロング・オーダー、つまりOP_BUY、OP_BUYSTOP、またはOP_BUYLIMITの 場合。
開始価格 =ASK
出口価格(損切り、利食い、またはOrderClose(...)) =BID
-
ショート注文、すなわちOP_SELL、OP_SELLSTOP、またはOP_SELLLIMITの 場合。
開始価格 =BID
出口価格(損切り、利食い、またはOrderClose(...)) =ASK
-
トヴァン
わかりました、おっしゃることはよくわかります。
私が普通に注文を閉じたり、ステルスストップロス(通常の注文を閉じる機能を呼び出すだけ)を操作する場合、OP_BUYにはBid、OP_SELLにはAskを使うことを十分承知しています。
しかし、注文を出すときは、いつもエントリー価格を基準にしてストップロスを計算しており、これまで問題が起きたことはありません。緩いスプレッドときついストップの組み合わせで、無効なストップエラーの原因になるのはわかります。
私と同じようにやっているサンプルは非常に多いことを付け加えておきます。
タイトなストップがない場合、多くの人が経験しがちな2つの手法の違いは、実際のお金の増減だけだと思いますが、どちらのタイプの注文も「スプレッド分だけ早く」止められるので、スプレッドがかなり安定していれば、互いに相殺される傾向にあります。
このロジックは正しいのでしょうか?
SeawolfとRuptorには申し訳ないのですが、おっしゃることはよくわかります。
私が普通に注文を閉じたり、ステルス逆指値(通常の注文を閉じる機能を呼び出すだけ)を操作する場合、OP_BUYにBid、OP_SELLにAskを使うことは十分に承知しています。
しかし、注文を出すときは、いつもエントリー価格を基準にしてストップロスを計算しており、これまで問題が起きたことはありません。緩いスプレッドときついストップの組み合わせで、無効なストップエラーの原因になるのはわかります。
私と同じようにやっているサンプルは非常に多いことを付け加えておきます。
タイトなストップがない場合、多くの人が経験しがちな2つの手法の違いは、実際のお金の増減だけだと思いますが、どちらのタイプの注文も「スプレッド分だけ早く」止められるので、スプレッドがかなり安定していれば、互いに相殺される傾向にあります。
このロジックは正しいのでしょうか?
良い点ですね。おっしゃるような方法をとっているEAが他にもたくさんあることに同意します。
これは、EAの動作に基づくストップロスに対する私たちの見解の違いを示しています。例えば私は、ストップロスをかなりきつく設定する傾向があります。だから、注文が失敗した場合の損失額よりも、注文が失敗する場所を気にします。一方、注文が終了したときの損失(または利益)に関心がある場合は、終値ではなく始値ですべての計算を行うことが理にかなっています。これは、損切りや利食いが厳しい場合(ペアによりますが、数ピップ以内)だけ問題になります。その場合、EAはMODE_STOPLEVELで(あなたが上で提案したように)実際に取引を完了できることを確認するために、いくつかの特別なチェックを行う必要があります。
私は主に純粋主義者の立場から話していましたが、両方の方法で実行するためのいくつかの有効な議論を見ることができます。
- Tovan
良い点です。私は、あなたが提案した方法でそれを行う他の多くのEAが存在することに同意します。
これは、EAがどのように機能するかによって、ストップロスに対する考え方が異なることを示しています。例えば私は、ストップロスをかなりきつく設定する傾向があります。だから、注文が失敗した場合の損失額よりも、注文が失敗する場所を気にします。一方、注文が終了したときの損失(または利益)に関心がある場合は、終値ではなく始値ですべての計算を行うことが理にかなっています。これは、損切りや利食いが厳しい場合(ペアによりますが、数ピップ以内)だけ問題になります。その場合、EAはMODE_STOPLEVELで(あなたが上で提案したように)実際に取引を完了できることを確認するために、いくつかの特別なチェックを行う必要があります。
私は主に純粋主義者の立場から話していましたが、両方の方法で実行するためのいくつかの有効な議論を見ることができます。
- Tovan
Tovanは、私が130のエラーを得るので、これは正しいです。
if(OrderType()==OP_SELL && OrderSymbol()==Symbol()){
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop) )
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point)
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate(")です。\n My ticket number is ", OrderTicket(), " and mystop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // new code
} }.
}
}
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss() <Bid-Point*TrailingStop-Point)・・・
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate(")。\n My ticket number is ", OrderTicket(), " and my stop loss setting is ", DoubleToStr(Bid-Point*TrailingStop,Digits)); // new code
}
}
というのも、この130エラーはエントリーとエグジットに関係するものなのでしょうか?
実は、皆さんは少し混乱しているようです。まったく違う2つのことをごっちゃにしている方もいらっしゃいます。
質問すべきは
1) 買いと売りのTPとSLの注文は、どの価格で執行されるのか。ビッドかアスクか?
2) 売買のTPとSLを計算するために、どのような価格を使用するのか。BidかAskか?
実は、SeawolfとRuptorが正しいのです。
ロング注文はASK 価格でエントリーし、BIDで エグジットします。
//---VANGROSH --- 正しいが、紛らわしい。TP価格またはSL価格=BID価格のときに、TPまたはSLのロング・オーダーが実行されると言ったほうがいい。これは、あなたの注文がTPまたはSLに当たるのを見たときに分かることですが、これらの価格をどのように計算するかとは関係ありません。
。
ストップロスやテイクプロフィットは出口ですから、ロングオーダーでそれらを計算するにはBID 価格を使用する必要があります。
//--VANGROSH--- すみません、間違っています。あなたは、何を見るか、つまり、どの価格が出口の引き金になるか、そして、どの価格を使ってTPとSL価格を計算するのかを混同していますね。
ちょっと考えてみてください。買い注文を出します。皆さんはASK価格で買うことに同意していますが、問題はありません。買い注文のTPが15ポイントで、スプレッドが5ポイントだとします。もし、TPをBID価格より15ポイント高く設定すると、スプレッドがASK価格より低く、BID価格より高いため、TPは10ポイントにしかなりません。エントリー価格(ASK)より5ポイント低い価格から15ポイントのTPを計算することは意味がありません。常に注文を入力した価格からTPまたはSLを計算する必要があります。買いの場合はASK、売りの場合はBIDです。
TPやSLがどの価格でヒットするかを考えるだけなら簡単です。ASK価格で入った買い注文で、TPがヒットするのはどの価格でしょうか?BID価格です。もしあなたのTPが1.2450で、ASK価格からTPを設定したとしたら、ASKラインが1.2450にあるとき、あなたはちょうどスプレッドを払い始めているところなのです。BIDラインが1.2450にあるときだけ、あなたのTPはヒットし、あなたの注文は15ポイントの利益で閉じられます。
SLも同じです。SLが30ポイントであれば、エントリー価格から30ポイントということです。買いの場合、エントリー価格はASKです。もしBID価格-30ポイントを使うなら、SLはスプレッドを除いたものになるので、実際のSLはエントリー(ASK)価格から35ポイントになります。SLが35ポイントになるのは、SL価格がエントリー価格より35ポイント低いからで、これは買い注文のためのものだったのでしょうか?
私はまだ数ヶ月しかやっていませんが、私が役に立ったのは、手動で取引するときにTPとSLがどの価格でヒットするかを観察することでした。そして、私の最初のEAでは、開いたEA注文で十字線ツールを使ってTPとSLのラインをダブルチェックし、さらにいくつかの閉じたEA注文でTPとSL価格が正確であることをチェックしました。
異なる方法をとる必要があるのは、トレーリングストップの場合だけです。買い注文の場合、BID価格を使用します。
if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop;
なぜなら、あなたのTSは、ヒットした場合に注文をクローズする価格(BID価格)よりXポイント下であってほしいからです。
売りの場合、ASKを使用します。
売りの場合はASKを使用します。 If(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;
なぜなら、TSはヒットした場合に注文をクローズする価格(ASK価格)よりXポイント上にあることが望ましいからです。
買いのTPとSL注文を終了させるのはビッド価格であることに注意してください。
そして、売りのTPとSL注文を終了させるのはASK価格であることを忘れないでください。
実は、皆さんは少し混乱しているようです。まったく違う2つのことをごっちゃにしている方もいらっしゃいます。
質問すべきは
1) 買いと売りのTPとSLの注文は、どの価格で執行されるのか。ビッドかアスクか?
2) 売買のTPとSLを計算するために、どのような価格を使用するのか。BidかAskか?
ちょっと考えてみてください。買い注文を出します。皆さんはASK価格で買うことに同意していますね。買い注文のTPが15ポイントで、スプレッドが5ポイントだとします。もし、TPをBID価格より15ポイント高く設定した場合、スプレッドがASK価格より低くBID価格より高いので、TPは10ポイントにしかなりません。エントリー価格(ASK)より5ポイント低い価格から15ポイントのTPを計算することは意味がありません。常に注文を入力した価格からTPまたはSLを計算する必要があります。買うならASK、売るならBID。
TPやSLがどの価格でヒットするかを考えるだけなら簡単です。ASK価格で入った買い注文で、TPがヒットするのはどの価格でしょうか?BID価格です。もしあなたのTPが1.2450で、ASK価格からTPを設定したとしたら、ASKラインが1.2450にあるとき、あなたはちょうどスプレッドを払い始めているところなのです。BIDラインが1.2450にあるときだけ、あなたのTPはヒットし、あなたの注文は15ポイントの利益で閉じられます。
SLも同じです。SLが30ポイントであれば、エントリー価格から30ポイントということです。買いの場合、エントリー価格はASKです。もしBID価格-30ポイントを使うなら、BID価格はASK価格より5ポイント低い(スプレッド)ので、あなたの本当のSLはエントリー(ASK)価格から35ポイントとなり、SLにはスプレッドを除いたことになります。SLが35ポイントになるのは、SL価格がエントリー価格より35ポイント低いからで、これは買い注文のためのものだったのでしょうか?
私はまだ数ヶ月しかやっていませんが、手動で取引するときにTPとSLがどのような価格でヒットするかを観察することが助けになりました。
異なることをする必要があるのは、トレーリングストップの場合だけです。買い注文の場合、ビッド価格を使用します。
if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop.BidOrderOpenPrice() > Point*_trailingStop;
なぜなら、TSは、ヒットした場合に注文をクローズする価格(ビッド価格)よりXポイント低くしたいからです。
売りの場合は、ASKを使用します。
if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop.If(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;
なぜなら、ASK価格であるヒットした場合に注文をクローズする価格よりXポイント上にTSを設定したいからです。
買いのTPとSL注文を終了させるのはビッド価格であることを忘れないでください。
そして、売りのTPとSL注文を終了させるのはASK価格です。
Vangrosh
ご意見ありがとうございます。
私が理解できるように助けてください。
これは正しいのでしょうか?
私は自動トレール付きのEAをやっています
if(OrderType()==OP_SELL && OrderSymbol()==Symbol()))
{if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // TPとSLを置く
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // TPを置く。// TPを置く
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // チェックトゥルー
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // if true modify order
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate("\n My ticket number is ", OrderTicket(), " and mystop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // new code
} } }.
}
}
実は、皆さんは少し混乱しているようです。まったく違う2つのことをごっちゃにしている方もいらっしゃいます。
質問すべきは
1) 買いと売りのTPとSLの注文は、どの価格で執行されるのか。ビッドかアスクか?
2) 売買のTPとSLを計算するために、どのような価格を使用するのか。BidかAskか?
ちょっと考えてみてください。買い注文を出します。皆さんはASK価格で買うことに同意していますが、問題はありません。買い注文のTPが15ポイントで、スプレッドが5ポイントだとします。もし、TPをBID価格より15ポイント高く設定すると、スプレッドがASK価格より低く、BID価格より高いため、TPは10ポイントにしかなりません。エントリー価格(ASK)より5ポイント低い価格から15ポイントのTPを計算することは意味がありません。常に注文を入力した価格からTPまたはSLを計算する必要があります。買いの場合はASK、売りの場合はBIDです。
自分のTPやSLがどの価格でヒットするかを考えれば、簡単です。ASK価格で入った買い注文で、TPがヒットするのはどの価格でしょうか?BID価格です。もしあなたのTPが1.2450で、ASK価格からTPを設定したとしたら、ASKラインが1.2450にあるとき、あなたはちょうどスプレッドを支払い始めているところなのです。BIDラインが1.2450にあるときだけ、あなたのTPはヒットし、あなたの注文は15ポイントの利益で終了します。
SLも同じです。SLが30ポイントであれば、エントリー価格から30ポイントということです。買いの場合、エントリー価格はASKです。もしBID価格-30ポイントを使うなら、SLはスプレッドを除いたものになるので、実際のSLはエントリー(ASK)価格から35ポイントになります。SLが35ポイントになるのは、SL価格がエントリー価格より35ポイント低いからで、これは買い注文のためのものだったのでしょうか?
私はまだ数ヶ月しかやっていませんが、私が役に立ったのは、手動で取引するときにTPとSLがどの価格でヒットするかを観察することでした。そして、私の最初のEAでは、開いたEA注文で十字線ツールを使ってTPとSLのラインをダブルチェックし、さらにいくつかの閉じたEA注文でTPとSL価格が正確であることをチェックしました。
異なる方法をとる必要があるのは、トレーリングストップの場合だけです。買い注文の場合、BID価格を使用します。
if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop;
なぜなら、あなたのTSは、ヒットした場合に注文をクローズする価格(BID価格)よりXポイント下であってほしいからです。
売りの場合、ASKを使用します。
売りの場合はASKを使用します。 If(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;
なぜなら、あなたのTSは、ASK価格であるヒットした場合に注文をクローズする価格よりXポイント上であって欲しいからです。
買いのTPとSL注文を終了させるのはビッド価格であることを忘れないでください。
そして、売りのTPとSL注文を終了させるのはASK価格です。
Vangrosh、Tovanへの返答で言及したように、あなたが何をしているかを正確に知っている限り、どちらの方法でもできます。混乱とは程遠いです。
つまり、エントリー価格、ブローカーのストップリミット、スプレッドがわかっていれば、アスクまたはビッドに対して「相対」にして必要に応じて調整することで、希望する「絶対」ストップロスを実現できます(130のエラーも発生しません!)。
私は、あなたがおっしゃるような方法で行うのが好きです。
Vangrosh、Tovanへの返答で言及したように、自分が何をしているのかがはっきりわかっていれば、どちらでもいいんです。混乱とは程遠いです。
つまり、エントリー価格、ブローカーのストップリミット、スプレッドがわかっていれば、アスクまたはビッドに対して「相対」にして必要に応じて調整することで、希望する「絶対」ストップロスを実現できます(130のエラーも発生しません!)。
ちなみに私は、あなたがおっしゃるような方法を好みます。
さて、Seawolfは「経験則だが、アスクでエントリーした場合はビッドで、ビッドでエントリーした場合はアスクでエグジット する」と言った。
これって、混乱してない?私は、彼が混乱しているという意味ではなく、彼が話している文脈が明確でないという意味です。彼の経験則は、彼が出口の計算について話している場合、正しくありません。私が「混乱している」と言ったのは、あなた方が何をしているのか分かっていないとか、他のやり方はできないとか言っているのではなく、彼らの指示の出し方が混乱していると言いたかったのです。例えば、上記のSeawolfの引用は、彼がMTでどの価格帯で注文が終了するかについて話しているのであれば、正しいものです。TPとSLについて教える場合、2つの基本的な文脈があるので、これを学んだばかりの人は、どの文脈を参照しているかを明確にする必要があると思います。
1) 建玉のTPとSLがどの価格(BidかAsk)でヒットするかという文脈や視点は、私がマニュアルトレードのために最初に学ぶべきことの一つです...
2) 上記1ではなく、TPとSLを計算するためにどの価格(BidまたはAsk)を使用するかに焦点を当てた文脈または視点です。
このような場合、「某大手証券会社」と「某大手証券会社」のどちらが有利なのでしょうか?
そして私は、TPとSLを見るのに、1つ以上のコンテキストがあることや、その他多くの理解すべきことがあることを、当初は知りませんでした。
このような場合、「このような場合、どのようにすればよいのか?
このような場合、「このような場合、どのようにすればよいのか?私のように勉強している人は、自分が何をしているのかよくわからないから、適切な文脈で物事を教わる必要があるのです。
私の経験では、多くの場合、私たちがまだ持っていない知識が前提となっているようです。まず基本的なルールを知り、経験を積む必要があります。そうして初めて、どのような「ルール」を曲げたり、逸脱したりできるかがわかるのです。
ところで、私の投稿であなたのことを指していたわけではありません。私は、あなたの回答が最も明確で正確だと思いました。このフォーラムで最も明確で正確な答えを得ようとするとき、私が最初に探すのはあなたの投稿なのです。このフォーラムで、より一貫して正確であることが証明され、実際に彼らの後ろに少しばかりの経験を持っていることを伝えることができるのは、私がこれまでに見つけた4、5人ほどしかいません。
さて、Seawolfは、"経験則...アスクでエントリーした場合はビッドで終了し、ビッドでエントリーした場合はアスクで終了 する "と言いました。
これって、混乱してない?私は、彼が混乱しているという意味ではなく、彼が話している文脈が明確でないという意味です。彼の経験則は、彼が出口の計算について話している場合、正しくありません。私が「混乱している」と言ったのは、あなた方が何をしているのか分かっていないとか、他のやり方はできないとか言っているのではなく、彼らの指示の出し方が混乱していると言いたかったのです。例えば、上記のSeawolfの引用は、彼がMTでどの価格帯で注文が終了するかについて話しているのであれば、正しいものです。TPとSLについて教える場合、2つの基本的な文脈があるので、これを学んだばかりの人は、どの文脈を参照しているかを明確にする必要があると思います。
1) 建て注文のTPとSLがどの価格(BidまたはAsk)でヒットするかに焦点を当てた文脈や視点-これは私が手動取引のために最初に学ぶ必要があったことの一つです...。
2) 上記1ではなく、TPとSLを計算するためにどの価格(BidまたはAsk)を使用するかに焦点を当てた文脈または視点です。
このような場合、「某大手証券会社」と「某大手証券会社」のどちらが有利なのでしょうか?
そして私は、TPとSLを見るのに、1つ以上のコンテキストがあることや、その他多くの理解すべきことがあることを、当初は知りませんでした。
このような場合、「このような場合、どのようにすればよいのか?
このような場合、「このような場合、どのようにすればよいのか?私のように勉強している人は、自分が何をしているのかよくわからないから、適切な文脈で物事を教わる必要があるのです。
私の経験では、多くの場合、私たちがまだ持っていない知識が前提となっているようです。まず基本的なルールを知り、経験を積む必要があります。そうして初めて、どのような「ルール」を曲げたり、逸脱したりできるかがわかるのです。
ところで、私の投稿であなたのことを指していたわけではありません。私は、あなたの回答が最も明確で正確だと思いました。このフォーラムで最も明確で正確な答えを得ようとするとき、私が最初に探すのはあなたの投稿なのです。このフォーラムで、より一貫して正確で、実際に少し以上の経験を積んでいることが分かる人は、これまでに4、5人しかいません。
お褒めの言葉、ありがとうございます。
私たちが混乱していないと言ったのは、私自身とTovanが同じような波動帯で動いているように思えたので、本当にそう言っただけです。
私の投稿が唐突に聞こえたのであればお詫びします。
このフォーラムでの私の一般的なアプローチは、(私自身が助けを求めていないときは)プログラミング技術を学ぼうとしている人たちを助けるためにベストを尽くすことです。私は、「成功するEAが必要だ」というタイトルの最初の投稿でフォーラムにやってきて、自分のためにすべてをやってほしいという人たちには本当に時間がないのです。あなたのような人は、私がここに興味を持ち続ける理由であり、あなたはおそらく私よりも外国為替取引について より多くを知っています。
私は1980年代初頭からプログラマーをしていますが、数年前にヘリコプターのパイロットとして働くために退職しました。しかし、今年は会社で飛行機が飛ばないので、駆け出しの調査会社を経営している友人のためにEAを書いています。私たちはカオス理論(というより市場知識)のアプローチで取引をしており、すでに有名なヘッジファンドの代理としてEAを取引し、非常に利益を上げています。本当に楽しいです。
頑張ってください。
バングローシュ
ご意見ありがとうございます。
このような場合、どうすればよいのでしょうか?
これは正しいのでしょうか?
私は自動トレール付きのEAを使っています
if(OrderType()==OP_SELL && OrderSymbol()==Symbol()))
{
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // TPとSLを配置}。
注文を出すときに基本的なTPとSLを設定するか、さもなければ上の行を一度だけ実行する必要があります。もし、上の行を
を実行すると、OrderModify エラー 1 が発生します。これは、既存の SL 値が同じ場合に発生します。
新しいもの、つまり価格がまだ変化していないものとして、SLは以前と同じにします。
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))// TPを置く
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // check true
これは問題なさそうです。そして 、ポイント(+Point) を追加してやっていることは 良いアイデア だと思います。私も同じようなことをします。
しかし、それは別の問題を解決するためで、ダブルスの比較がうまくいかないときに起こりうる問題です。
を追加します。そうしないと、トレーリングストップが実行されないことがあります。
残りは正しいようです。
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // if true オーダーを修正する。
Print("Error_Modify - ",GetLastError())。
else str=StringConcatenate("\n My ticket number is ", OrderTicket(), " and my stop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // new code
}
}
}
以下は、MQ EA MACD Sample.mq4のトレーリングストップの例です。
しかし、私はこのコードからエラーが出ることに気づきました。それは、上記のように2倍を比較するときに、より大きいその後>節が時々TRUEとして評価されるという既知の問題のためです。
と評価されることがあるからです。詳細は、Compairing Doubleで検索してください。stdlib.mq4(ライブラリフォルダ内)にあるCompareDoubles()関数や、本来は不要な場所でNormalizeDouble()を使うなどの回避策がありますが、この場合、あなたのように単にPointを追加するのが良い方法だと思います。しかし、私はあなたのやり方をテストしたことがないので、それが正しいかどうかは分かりませんが、大丈夫だと思います。次の投稿で、私のEAで使用しているコードをお見せします。