新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 549

 

代码中的以下缩写结构是否正确:a < b && ( c > d1 || c > d2 || c > d3) ?

这是为了避免写作。(a < b && c > d1) || (a < b & c > d2) 等多次。

 
HeAic:

代码中的以下缩写结构是否正确:a < b && ( c > d1 || c > d2 || c > d3) ?

这是为了避免写作。(a < b && c > d1) || (a < b & c > d2),如此反复多次。

当然会这样做。在写这种大型结构时,我唯一要做的是明确指出优先级括号。

(a < b)  && ( c > d1 || c >d2 || c > d3)

对于MT4/5编译器,我们可以不用指定括号,因为现有的优先级不允许我们以不同的方式计算表达式的结果。但这些括号有两个好处。

  1. 这种表达方式更容易直观地理解,没有任何关于优先级的问题(不要记住每个编译器的优先级)。
  2. 如果代码被移到另一个编译器中,而这个编译器可能有不同的优先级,那么代码的工作原理将与在当前编译器中一样。
 
Alexey Viktorov:

谢谢你,如果

S_sk= SymbolInfoInteger("EURUSD",SYMBOL_SELECT);

返回的故障,市场观察中没有符号,我如何在那里添加它?

 
lil_lil:

谢谢你,如果

返回的故障,市场观察中没有符号,我如何在那里添加它?

符号选择()

一切都在帮助中。光标指向函数名称和F1

 
Artyom Trishkin:

符号选择()

这一切都在帮助中。光标指向函数名称和F1

谢谢你。

 

这其中的原因是什么?我写了一个脚本,在MT5中设置限价订单。当我将其发送到终端的图表中时,订单没有被设置,尽管result.retcode返回10009(订单已执行)。

 
iv1986:

这其中的原因是什么?我写了一个脚本,在MT5中设置限价订单。当我将其发送到终端的图表中时,订单没有被设置,尽管result.retcode返回10009(订单已执行)。

  1. 代码。
  2. 日志。
  3. 陈述内容。
它都在哪里?

 
Ihor Herasko:

  1. 代码。
  2. 记录本。
  3. 声明。
它都在哪里?

{MqlTradeRequest request={0};
MqlTradeResult result={0};
double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID)。
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK)。
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)。
double p=NormalizeDouble(ChartPriceOnDropped(),digits)。
如果( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
{p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
}
int V=75。
如果(p<Ask)
{
request.action =TRADE_ACTION_PENDING; // 交易操作的类型
request.symbol =Symbol(); // symbol
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/)
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))。
如果(request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 。
}
request.type =ORDER_TYPE_BUY_LIMIT; // 订单类型
request.price =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // price to open
request.deviation=50; // 允许的价格偏差
request.sl =p; // 止损位置
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits); // Take Profit位置
request.type_filling=ORDER_FILLING_IOC。
request.type_time=ORDER_TIME_DAY。
request.stoplimit=Ask。
OrderSend(request,result)。
}
如果(p>Bid)
{
request.action =TRADE_ACTION_PENDING; // 交易操作的类型
request.symbol =Symbol(); // symbol
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/( (p-Bid)/)
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))。
如果(request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 。
}// 数量
request.type =ORDER_TYPE_SELL_LIMIT; // 订单类型
request.price =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // price to open
request.deviation=50; // 允许的价格偏差
request.sl =p; // 止损位置
request.tp =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit position
request.type_time=ORDER_TIME_DAY。
request.type_filling=ORDER_FILLING_IOC。
request.stoplimit=Bid。
OrderSend(request,result)。

}

日志说: 2018.05.14 10:12:38.187 交易 '992940': 卖出限额3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 放置执行。

 
iv1986:

日志说: 2018.05.14 10:12:38.187 交易 '992940': 卖出限额3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 放置执行。

这写在一般日志中。那么 "专家 "日志里有什么呢?而且不仅仅是一行,而是整个日志。透过钥匙孔没有什么可看的。

此外,在引用的代码中没有对返回代码的检查。所以不清楚关于错误代码的结论是根据什么作出的。

要建议什么,你需要有明确的可重复的步骤(看到你看到的东西),而这里没有。切除代码中的问题部分,自己运行它,然后准确地显示失败的原因。

P.S.要粘贴代码,请使用"</>"图标或Alt+S。

 

在代码的末尾也有Alert(result.retcode)。

在一般日志中。

2018.05.14 12:08:16.984 脚本 脚本LIMIT(Si-6.18,M15)加载成功

2018.05.14 12:08:17.187 交易 '992940': buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 交易 '992940': 接受买入限制 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 交易 '992940': buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905 placed for execution

2018.05.14 12:08:17.546 交易 '992940': 订单#13235300买入限价3.00 / 3.00 Si-6.18 at 62091 在337.532 ms内完成。

2018.05.14 12:08:17.578 脚本 脚本LIMIT(Si-6.18,M15)被删除。


在专家栏中:2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) 警报:10009,无其他内容。