//+------------------------------------------------------------------+//| Модификация Stop Loss открытой позиции |//+------------------------------------------------------------------+//--- объявление запроса и результатаMqlTradeRequest request;
MqlTradeResult result;
int total=PositionsTotal(); // количество открытых позиций Print("total = ",total," ");
//--- перебор всех открытых позицийfor(int i=0; i<total; i++)
{
if(PositionSelect(_Symbol)==true) // есть открытая позиция
{
//--- параметры ордераulong position_ticket=PositionGetTicket(i);// тикет позицииstring position_symbol=PositionGetString(POSITION_SYMBOL); // символ int digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // количество знаков после запятойulong magic=PositionGetInteger(POSITION_MAGIC); // MagicNumber позицииif(PositionSelect(position_symbol)) // если позицию удалось выделить, значит - позиция существует
{
//--- обнуление значений запроса и результатаZeroMemory(request);
ZeroMemory(result);
//--- установка параметров операции
request.action = TRADE_ACTION_SLTP; // тип торговой операции
request.position = position_ticket; // тикет позиции
request.symbol = position_symbol; // символ
request.sl= STP; // Stop Loss позиции
request.tp = 0; // Take Profit позиции//--- отсылаем ордерint number=OrderSend(request,result);
// анализируем код возврата торгового сервераif(result.retcode==10009 || result.retcode==10008) //Request is completed or order placed
{
Alert("Ордер Sell успешно помещен, тикет ордера # ",result.order," ");
}
else
{
Alert("Запрос на установку ордера Sell не выполнен - код ошибки:",GetLastError());
return;
}
}
}
}
ありがとうございました。探したけど見つからなかった...。
では、次の質問ですが、ステップが25だとすると、25で割り切れる数への丸めをどうアレンジするか、もしかしたら関数があるのでは?
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfonormalizeprice
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfonormalizeprice
ありがとうございます。でも、標準のトレード・ライブラリは使っていません。
コードなし、コメントなし。
ええ、それは変ですね。ファイルを添付したが、確認しなかった。私のミスです。今、私はコードとテスターが[Invalid stops]で行を与えるコードの抜粋の両方を添付しています。ポジションを変更する際に、MqlTradeRequestの構造が どのように機能するのか理解したいです。私の場合は、SARのストップを変更したときです。テスターから[Invalid stops]のメッセージが消えないのですが。RTSスプライスツール。
ええ、それは変ですね。ファイルを添付したが、確認しなかった。私のミスです。今、私はコードとテスターが[Invalid stops]という行を出すコードの抜粋の両方を添付しています。ポジションを変更する際に、MqlTradeRequestの構造が どのように機能するのか理解したいです。私の場合は、SARのストップを変更したときです。テスターから[Invalid stops]のメッセージが消えないのですが。RTSスプライスツール。
これは、一見するとエラーを探すべきコード断片ではありません。同じポジションのトリプルセレクトが気になる程度です。冗長である。
不正確なストップにエラーがある場合、これらのストップが計算される場所から検索を開始する必要があるでしょう。
ええ、それは変ですね。ファイルを添付したが、確認しなかった。私のミスです。今、私はコードとテスターが[Invalid stops]で行を与えるコードの抜粋の両方を添付しています。ポジションを変更する際に、MqlTradeRequestの構造が どのように機能するのか理解したいです。私の場合は、SARのストップを変更したときです。テスターから[Invalid stops]のメッセージが消えないのですが。RTSスプライス。
完全な理解のためには、どのような種類のアカウントハッジまたはネッティングがあるのかを特定する必要があります。
アカウントタイプがWasgeの場合
シンボルの位置を決めたものの、自分が見たかったものとは違うかもしれない......。
しかし、今は思い通りのポジションを選ぶことができます。
次に、正しいポジションを選択するためにもう一度トライします
ここでも、間違ったポジションを選んでいる確率が非常に高いです
この場合、OrderSend()関数がどのように動作するかを確認するには、そうするのが良いのですが、そのまま実行して、エラーが消えない場合は、エラーコードだけでなく、ポジションチケット、ポジション価格、新しいストップとテイクの価格もプリントしておくと良いでしょう。これが最低ラインです。
完全な理解のためには、どのような種類のアカウントハッジまたはネッティングを指定する必要があります。
コメントありがとうございます。アカウントの種類はネッティングです。RTSスプライス。そこが厄介なところでしょうか。1つのシンボルに1つのポジション。どのように選んでも、そのポジションにたどり着くことができるのです。これらは、保留中のオーダー ではないのですね?だから余計にわからなくなるんです。どうしたんですか?すべてのバリエーションを試しました。
コメントありがとうございます。アカウントタイプのネッティング。RTS スプライスインスツルメント。そこが厄介なところでしょうか。1つのシンボルに1つのポジション。どのように選んでも、そのポジションにたどり着くことができるのです。これらは、保留中のオーダー ではないのですね?だから余計にわからなくなるんです。どうしたんですか?すべてのバリエーションを試しました。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
初心者の方からの質問 MQL5 MT5 MetaTrader 5
アレクセイ・ビクトロフ さん 2017.11.22 09:29
この場合、OrderSend()関数がどのように動作するかは、そのようにして確認する必要がありますが、本来であれば、エラーコードだけでなく、ポジションチケット、ポジション価格、新しいストップとテイクの価格もプリントして おくとよいでしょう。これが最低ラインです。
だから余計にわからないんです--WHAT'S WRONG?!!!(何が悪い?すべてのオプションを試した。
この行をエラーの発生する場所に挿入してください。
Print(ToString(request) + ToString(result));
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5言語の特殊性、微妙なニュアンスとトリック
fxsaber さん 2017.02.25 16:27
MqlTrade-structuresの文字列への変換#define TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"
string ToString( const MqlTradeTransaction &Trans )
{
return(TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) +
TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) +
TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) +
TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) +
TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) +
TOSTRING(Trans.position) + TOSTRING(Trans.position_by));
}
string ToString( const MqlTradeRequest &Request )
{
return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) +
TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) + TOSTRING(Request.tp) +
TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
TOSTRING(Request.position) + TOSTRING(Request.position_by));
}
string ToString( const MqlTradeResult &Result )
{
return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +
TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +
TOSTRING(Result.retcode_external));
}
#undef TOSTRING
#undef TOSTRING2
この行をエラーの発生する場所に挿入してください。
貼り付けました。以下はテスターの結果です。
2017.11.22 18:22:51.127 2016.11.09 12:00:00 為替買い 1.00 RTS 98080でスプライス sl: 94130 (98070 / 98080 / 98070)
2017.11.22 18:22:51.127 2016.11.09 12:00:00 取引 #4 買 1.00 RTS Splice at 98080 完了(注文 #4 に基づいています。)
2017.11.22 18:22:51.127 2016.11.09 12:00:00 取引実行 【#4買い1.00 RTSスプライス@98080】の続きです。
2017.11.22 18:22:51.127 2016.11.09 12:00:00 注文実行 98080で買い1.00【#4 98080で買い1.00 RTSスプライス】。
2017.11.22 18:22:53.561 2016.11.09 14:05:00:00 failed modify #4 buy 1.00 RTS Splice sl: 94130, tp: 0 -> sl: 94316, tp: 0 [Invalid stops] (ストップが無効です。
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.action =TRADE_ACTION_SLTP(6)である。
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.magic = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 リクエスト.オーダー = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 リクエスト.シンボル = RTS スプライス
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.volume = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 リクエスト.プライス = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.stoplimit = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.sl = 94316.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.tp = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.deviation = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.type = ORDER_TYPE_BUY (0件)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.type_filling = ORDER_FILLING_FOK (0件)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.type_time = ORDER_TIME_GTC (0)です。
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.expiration = 1970.01.01 00:00:00
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.comment=。
2017.11.22 18:22:53.576 2016.11.09 14:05:00 リクエスト.ポジション = 4
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.position_by = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.retcode = 10016
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.deal = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.order = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.volume = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.price = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.bid = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.ask = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.comment = Invalid stops
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.request_id = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.retcode_external = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 アラート:TPとSLのエラーコードによる位置修正エラーです。4756
入れてください。テスターの結果はこちらです。
サーバーモードとテスターモード?