int CloseOrder(int ticket, double lots)
{
int err,i1;
double price;
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
if (lots<MarketInfo(Symbol(),MODE_MINLOT))lots=MarketInfo(Symbol(),MODE_MINLOT);
while(i1<10)
{
RefreshRates();
if (OrderType()==0)price=Bid;
if (OrderType()==1)price=Ask;
if (OrderType()>1){OrderDelete(ticket);return(0);}
OrderClose(ticket,lots,NormalizeDouble(price,Digits),Slippage,Goldenrod);
err = GetLastError();
if (err == 0) break;
Print(WindowExpertName(),Symbol(),Error(err)," при закрытии ордера");
Sleep(100);
i1++;
}
return(0);
}
,我已经重写了订单修改代码,但错误仍然存在。
我强调,这个错误不是来自日志--日志中没有一个错误。
我在运行测试时发现了 "结果 "中的错误。
例如:
我以 1.4654的价格建立了 买入头寸(订单号1)
然后在结果中显示修改(订单号1)价格1.4654,获利1.4752
然后在结果中显示关闭(订单号1)价格1.4704,获利1.4752
利润=50.00
亏损头寸的例子,虽然我应该只在获利时关闭,因为我没有设定止损。
我在1.4820开了一个买入头寸(订单号271)
,在结果中显示修改(订单号271)价格1.4820,获利1.4918
,在结果中显示关闭(订单号1)价格1.4737,获利1.4918
利润= - 83.46
我在所有地方都设置了100的获利空间。
我没有设置StopLoss。
我不知道如何修复它。
当编译这个EA代码时=0个错误和0个警告。
我使用这个代码来修改订单。
你能告诉我这个错误在哪里吗--我找不到它。
我已经重写了订单修改代码,错误依然存在。
我强调,这个错误不是来自于日志--日志中没有任何一个错误。
我在测试过程中发现了 "结果 "中的错误。
例子。
我在1.4654开了一个买入头寸(订单号1)。
接下来,在结果中,它说买入(订单号1)价格为1.4654,获利为1.4752。
接下来,在结果中,它说关闭(订单号1)价格1.4704和TakeProfit 1.4752。
利润=50.00
一个亏损头寸的例子,因为我没有设置止损,所以我应该只在获利时关闭。
我在1.4820开了一个买入头寸(订单号271)。
接下来,在结果中,它说修改(订单号271)价格1.4820和TakeProfit 1.4918。
接下来,结果中显示收盘价(订单号1)为1.4737,获利为1.4918。
利润=-83.46
我把各处的TakeProfit设置为100。
我没有设置StopLoss。
我不知道如何修复它。
当编译这个EA代码时=0个错误和0个警告。
我使用这个代码来修改订单。
请帮助我找到以下数值
1 过去 X=5天 的最大日波动率(日最高值减去最低值) 。
2 过去 X=130天 的平均日波动率
3 如果最大日 波动率位于 A=75到 B=150 的范围内 , 这些数值如何写在条件中?
1.首先你要找出你在窗口需要多少条https://docs.mql4.com/ru/windows/WindowBarsPerChart。
2.然后你就会得到第一个酒吧的日期https://docs.mql4.com/ru/windows/WindowFirstVisibleBar。
3.知道这个初始条形图和条形图的数量--通过这些条形图并确定其中的高点和低点。
4.利润
变体2
https://docs.mql4.com/ru/windows/WindowPriceMaxтво
https://docs.mql4.com/ru/windows/WindowPriceMinВторой 变体
我倾向于第一种方案,但我不知道如何计算窗口中的条数。 第二种方案更加简洁明了。
但如何 "抓住 "前一栏的最后一个最大值和最小值呢? 提前感谢您!
但是,如何 "抓住 "前一栏的最后最大值和最小值?
你只需要记住当前条形上达到的最大值和最小值,当一个新的条形 出现并成为前一个条形时,你将从记忆的变量中获取最大值和最小值。
你只需要记住当前条形图上达到的最大值和最小值,当一个新条形图出现并成为前一个条形图时,你将从记忆中的变量中获取最大值和最小值。
将zet变量声明为静态变量,或者在全局区域内声明它。
在给它分配一个新的值之前,检查一个新的条形图,并检查它的值和当前值之间的差异,然后给它分配一个新的值。
当测试器中的平仓交易写成你所列举的那样,很可能是订单平仓功能的结果(TP和SL与此无关)。
谢谢,但代码中似乎没有错误。
但在EA中还有一个代码。