来自一个 "傻瓜 "的问题 - 页 140

 

你能告诉我,我试图设置止盈和止损,订单已经打开,但SL和TP没有设置,这是什么问题,如何解决?

 

检查工具的SYMBOL_TRADE_EXEMODE 属性,它可以是 ENUM_SYMBOL_TRADE_EXECUTION 枚举中的一个值

ENUM_SYMBOL_TRADE_EXECUTION

识别器

描述

符号_交易_执行_请求

根据要求进行交易

符号_交易_执行_instant

以流媒体价格进行交易

符号_交易_执行_市场

执行_执行_市场

符号_交易_执行_交换

交易所执行

SYMBOL_TRADE_EXECUTION_MARKET模式下交易 不需要SL和TP

ENUM_SYMBOL_TRADE_EXECUTION trade_execution=(ENUM_SYMBOL_TRADE_EXECUTION)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_EXEMODE);
 
T-G:

你能告诉我,我试图设置止盈和止损,订单已经打开,但SL和TP没有设置,这是什么问题,如何解决?

经纪人支持的市场执行模式是什么?如果支持市场执行 模式,那么SL和TP就不会为其设置
 

返回3 - 即SYMBOL_TRADE_EXECUTION_MARKET

不提供SL和TP是什么意思,如果你需要水平,你会怎么做?或者你的意思是在打开后修改它?如果你修改了它,你能给我一个函数的例子吗,谢谢。

 
T-G:

返回3 - 即SYMBOL_TRADE_EXECUTION_MARKET

不提供SL和TP是什么意思,如果你需要水平,你会怎么做?或者你的意思是在打开后修改它?如果你修改了它,你能给我一个函数的例子吗,谢谢。

如果你将使用限价订单,你可以同时设置止损和止盈。限价单可以设置在离市场多近的位置?取决于经纪人,从零点开始(即按市场价格)。
 
如果我需要跟随市场怎么办? 我开了一个订单,如果我不能设置TP和SL,我应该怎么做?
 
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
T-G:

如果我需要跟随市场怎么办? 我开了一个订单, 如果我不能设置TP和SL,我应该怎么做?
在开仓/修改仓位 后,您可以使用单独的请求来设置SL和TP水平。
 
T-G: 还是说你的意思是打开后再修改?如果修改了,能否给一个函数的例子,谢谢。

这就是MQL5参考/ 标准常量、枚举和结构/ 数据结构/ 交易请求的结构所说的。

SL & TP Modification

Торговый приказ на модификацию уровней StopLoss и/или TakeProfit. Требуется указание 4 полей:

action 
symbol 
sl 
tp 

因此,代码大致是这样的(检查位置后)。

bool PositionModify(const string symbol,double sl,double tp)
  { 
   m_request={0};
   m_result ={0};
//--- setting request
   m_request.action=TRADE_ACTION_SLTP;
   m_request.symbol=symbol;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- order send
   if(!OrderSend(m_request,m_result))
     {
      Print("Неудача с отправкой ордера при TRADE_ACTION_SLTP");
      return(false);
     }
//--- ok
   return(true);
  }
 
T-G:

返回3- 所以你得到SYMBOL_TRADE_EXECUTION_MARKET

问题似乎出在其他地方。

void OnStart()
  {
   Print("SYMBOL_TRADE_EXECUTION_MARKET=",SYMBOL_TRADE_EXECUTION_MARKET);
  }
值 "3 "没有以任何方式返回 :)毕竟,枚举的编号是从零开始的。