{ if (OrderStopLoss()==0) { オーダーモディファイ(オーダーチケット(),オーダーオープンプライス(),アスク+ポイント*トレイリングストップ,オーダーテイクプロフィット(),0,レッド); // TPとSLを配置する } if((注文開始価格()-アスク)>(ポイント*トレイリングストップ))// 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 my stop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // new code } } }
if(OrderType()==OP_BUY){if(Bid-OrderOpenPrice()>(Point* TrailingStop)){double oldStopLoss =OrderStopLoss();double newStopLoss =Bid-Point* TrailingStop;double nextStopLoss = oldStopLoss +Point;// Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79 if( newStopLoss >= nextStopLoss) // checking that the new stoploss price is at least 1 point or greater then the old stoploss{OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);return;}}}
バングローシュ
ご意見ありがとうございます。
このような場合、どうすればよいのでしょうか?
これは正しいのでしょうか?
私は自動トレール付きのEAを使っています
if(OrderType()==OP_SELL && OrderSymbol()==Symbol()))
{if (OrderStopLoss()==0)
{
オーダーモディファイ(オーダーチケット(),オーダーオープンプライス(),アスク+ポイント*トレイリングストップ,オーダーテイクプロフィット(),0,レッド); // TPとSLを配置する
}
if((注文開始価格()-アスク)>(ポイント*トレイリングストップ))// 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 my stop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // new code
}
}
}
以下は、別の記事で書いた、異なるアプローチについての説明です。
>>新しいストップロス価格が古いストップロス価格より少なくとも1ポイント以上高いことを確認するだけで、簡単に修正できます。売り注文の場合は、その逆をするだけです。
これが私が使っている関数の完全版です。今思うと、nextStopLossという変数名をもっとうまく使うことができたと思います。
また、私のトレイリングストップ関数は、複数の注文を同時に開くことができるEAにあり、そのため、複数の注文のトレイリングストップを同時に更新できるように、これらのパラメータを持っています。
次に、start()関数にあります。
他の関数呼び出しはそのままにしてあります。これは、私が自分のコードをできるだけ特定の関数に分割するのが好きだということがおわかりいただけると思います。そうすることで、物事がとても簡単になります。
あなたのEAがうまくいくことを祈っています。
以下は、私が別の投稿で書いた、異なるアプローチについての説明です。
>>新しいストップロスの価格が古いストップロスより少なくとも1ポイント以上大きいことを確認するだけで、簡単に修正できます。売り注文の場合は、その逆をするだけです。
以下は私が使っている関数です。今思うと、nextStopLossという変数名をもっとうまく使うことができたと思います。
また、私のトレイリングストップ関数は、複数の注文を同時に開くことができるEAにあり、そのため、複数の注文のトレイリングストップを同時に更新できるように、これらのパラメータを持っています。
次に、start()関数にあります。
他の関数コールを残しておいたのは、私が自分のコードをできるだけ特定の関数に分割したいからです。そうすることで、物事がとても簡単になります。
あなたのEAで幸運を祈ります。
ありがとうございます - いい感じです
スタート()関 数をEAの一番下に配置するのですか?
私もドレッドエラーで困っています。ストップロスもテイクプロフィットもないのですが、問題ないはずのマーケットから何ピプスも離れたところに、ただ保留中の注文を置くのに失敗するのです...。
130の問題は、それがエラーのクラスまたはグループを示すことであり、即座に修正することにつながらないということです...
あなたは問題を修正することができますし、それはまだそこにある。
ここで発生するのは、タイプミスだけ?
買い逆指値注文のつもりが、Askより上の買い指値を入力しているのでは?
FWIW
-BB-
good'ole 130の問題は、それがエラーのクラスまたはグループの(の1つ)を示し、任意の即座の修正に1つをリードしていないことです。
あなたは問題を修正することができますし、それはまだそこにある
ここで発生するのは、タイプミスだけ?
買い逆指値注文のつもりが、Askより上の買い指値を入力しているのでは?
FWIW
-BB-
操作の種類を選択する関数があります。
このような感じです。
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily。パイロン0@0.8024をレベル2で売り建てる一方、ビッド=0.8016を売り建てる。
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily。オーダーセンドエラー 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily。ReliableOrderSend error : 130 : 無効なストップです。
TheEconomist さん、こんにちは。
いくつか質問させてください。
1.WhatOperation()が実際に与えられたものをノルム化することが保証されていない限り、ToCompareにノーマライズを見ません。
2.2. ダブルコンペに問題がある - 例えば、'Conditional Statement failure...'( 1.4225 > 1.4225) が真でない場合!!!!!!!
3.https://book.mql4.com/appendix/limits のガイダンスに従っていますか?
回答
130の'Quick Question' のエラーを解決するために、この投稿を勉強しています。 注文送信機能も印刷機能付き仕訳もあるのですが、何が起こっているのかご存知の方はいらっしゃいますか?
ありがとうございました。
バウアーボーイ
.
as seen on .../24681
1.StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);
SL,TPは Bidから StopLevel 以上離れて いる必要が あります。
下記参照 (**)
2.ACCTxx = NormalizeDouble(Ask ...(..),Digits)です。
3.Print("Bid=",DoubleToString(Ask,Digits),", Ask=",DoubleToString(Bid,Digits));
4.Print ("ストップロス値",DoubleToString( ACCTSL, Digits),", stopLoss=",stopLoss);
Print ("Take Profit Value", DoubleToString(ACCTTP,Digits),", takeProfit=",takeProfit);
なぜDoubleToString()なのか?Print() は4桁しか 表示しない
Btw、私はまた、少なくとも 一 度はどこかに いると思います Print("MyDig=",MyDig); なぜ? まさか、あなたはそれを心配する必要があります。些細なことに思えるかもしれませんが、このような単純なものにまつわる面白さに驚くことでしょう。
5.5. 利用可能なすべての情報を手元に置き、それを表示 することによって、すべての問題を簡単に解決することができます。
そして、昔ながらの紙と鉛筆で、 どこに誤解があるのかを確認 することができます。
(**)
参考:https://book.mql4.com/appendix/limits
StopLevel 最小距離の制限。
以下の条件のいずれかが崩れた場合、取引操作は実行されません。
.
as seen on .../24681
1.StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);
SL,TPは Bidから StopLevel 以上離れて いる必要が あります。
下記参照 (**)
2.ACCTxx = NormalizeDouble(Ask ...(..),Digits);
3.Print("Bid=",DoubleToString(Ask,Digits),", Ask=",DoubleToString(Bid,Digits));
4.Print ("ストップロス値",DoubleToString( ACCTSL, Digits),", stopLoss=",stopLoss);
Print ("Take Profit Value", DoubleToString(ACCTTP,Digits),", takeProfit=",takeProfit);
なぜDoubleToString()なのか?Print() は4桁しか 表示しない
Btw、私はまた、少なくとも 一 度はどこかに いると思います Print("MyDig=",MyDig); なぜ? まさか、あなたはそれを心配する必要があります。些細なことかもしれませんが、このような単純なものにまつわる面白さに驚くことでしょう!
5.すべての利用可能な情報を手元に置いて、それを表示 することによって、すべてのあなたの問題は簡単に解決することができます。
そして、昔ながらの紙と鉛筆で、 どこに誤解があるのかを確認 することができます。
(**)
参考:https://book.mql4.com/appendix/limits
StopLevel 最小距離の制限。
以下の条件のいずれかが崩れた場合、取引操作は実行されません。
何がどうなっているのか、なぜこうなっているのか、本当にわからない。
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: OrderSend (Trender Beta Test ) failed with error #130
2009.08.05 14:32:26 トレンダー・ベータテスト EURUSD,H1: MyDig=10
2009.08.05 14:32:26 トレンダーベータテスト EURUSD,H1: テイクプロフィット Value1.43155, takeProfit=110
2009.08.05 14:32:26 トレンダーベータテスト EURUSD,H1: ストップロス Value1.42255, stopLoss=200
2009.08.05 14:32:26 トレンダーベータテスト EURUSD,H1: Bid=1.44255、Ask=1.44229
何が起こっているのか、なぜこのようなことが起こっているのか、本当にわからない
本当にコード全体を表示する時間です。もし、躊躇するならば、PMを使うことができます。
私はあなたがTPがその後入札より低い持っている参照してください