//+------------------------------------------------------------------+//| Модификация 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的停止时。我无法摆脱来自测试人员的[无效停止]信息。RTS拼接工具。
是的,这很奇怪。附上文件,但没有检查。我的错。现在我同时附上代码和代码摘录,其中测试人员给出了一行[Invalid stops]。我想了解在修改头寸时,MqlTradeRequest结构 是如何工作的。在我的例子中,它是在改变SAR的停止时。我无法摆脱来自测试人员的[无效停止]信息。RTS拼接工具。
乍一看,这不是我们应该寻找错误的代码片段。让我感到不安的只是三选一和同一职位。它是多余的。
你有一个错误的错误站,你可能应该从计算这些站的地方开始搜索。
是的,这很奇怪。附上了文件,但没有检查。我的错。现在我同时附上代码和代码摘录,其中测试人员给出了一行[Invalid stops]。我想了解在修改头寸时,MqlTradeRequest结构 是如何工作的。在我的例子中,它是在改变SAR的停止时。我无法摆脱来自测试人员的[无效停止]信息。RTS拼接。
为了充分理解,有必要具体说明哪种类型的帐务清算或净额结算
如果账户类型为
你已经为符号选择了一个位置,但它可能不是你想要看到的。
但现在我们选择了我们想要的确切位置。
接下来,再次尝试选择正确的位置
同样,你选择错误位置的概率非常高
要检查OrderSend()函数在这种情况下的表现,你应该这样做,但最好是按部就班地做,如果错误没有消失,不仅要打印错误代码,还要打印仓单、仓位价格、新的止损价格和采取。这是最低限度。
为了充分了解,你需要说明是哪种类型的账户哈吉或净额结算
谢谢你的评论。账户类型是净值化。RTS拼接。这是最棘手的部分吗?一个符号上的一个位置。你可以选择任何你喜欢的方式,你仍然会到达那个位置。这些不是待定订单,是吗?这就是为什么我更不明白--什么是错的?我尝试了所有的变种。
谢谢你的评论。账户类型的净值化。RTS接驳仪器。这是最棘手的部分吗?一个符号上的一个位置。你可以选择任何你喜欢的方式,你仍然会到达那个位置。这些不是待定订单,是吗?这就是为什么我更不明白--什么是错的?我尝试了所有的变种。
关于交易、自动交易系统和策略测试的论坛
初学者的问题 MQL5 MT5 MetaTrader 5
Alexey Viktorov, 2017.11.22 09:29
要检查OrderSend()函数在这种情况下是如何表现的,你需要这样做并检查,但最好是按照它应该做的来做,如果错误没有消失,不仅要打印错误代码,还要打印仓单、仓位价格、新的止损价格和采取。这是最低限度。
这就是为什么我更不明白--什么是错的?尝试了所有的选项。
在出现错误的地方插入这一行
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处的拼接:94130(98070/98080/98070)。
2017.11.22 18:22:51.127 2016.11.09 12:00:00 交易#4买入1.00 RTS拼接在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 修改失败 #4买1.00 RTS拼接 sl: 94130, tp: 0 -> sl: 94316, tp: 0 [无效站]
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 Request.order = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.symbol = RTS Splice
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 Request.price = 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 请求.评论 =
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.position = 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 结果.交易=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 = 无效站点
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
把它放进去。下面是测试器的结果。
服务器和测试员模式?