sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ//sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ
voidOnTick()
{
//---if(tip_sl==en_po_atr)
{ //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССАPrint("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
}
else//ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
{
sl= razmer_fikc_sl; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТPrint("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
}
double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
我按照你的建议做了代码。在代码的开头,我有一个条件来选择止损的类型--atp或固定。
然后我注释了我的规范化,并这样设置
利润计算是代码中的下一步。 那里没有问题,在计算完利润后,我添加了建议我使用的可怕的公式。
所有的编译都没有错误。但当我运行测试时,日志中出现了错误,据我所知是除以0,测试被停止。我哪里搞砸了,或者我做错了什么?
只要删除它。
我按照你的建议做了代码。在代码的开头,我有一个条件来选择止损的类型--atp或固定。
然后我注释了我的规范化,并这样设置
利润计算是代码中的下一步。 那里没有问题,在计算完利润后,我添加了建议我使用的可怕的公式。
所有的编译都没有错误。但当我运行测试时,日志显示了一个错误,我得到了除以零的结果,测试被停止了。我在哪里搞砸了,或者我哪里做得不对?
只是当你得到两种不同的选择时,你不应该同时应用两种选择。
你是把Sl算作两个不同的选择吗?
或
你得到了价格值的价值。而公式应该包含从......到.... 的点。
因此,与价格有一定距离的止损是iATR(.........)/_Point或razmer_fikc_sl,但在函数中使用两个不同的值不是很方便,因此最好只留一个变量
不要忘了,在计算地段大小之前,应该先计算sl。
让它成为...
只要删除它。
我修好了那条线,测试就开始了--非常感谢你们。只是不明白为什么从iATR中获取止损点到一个变量时,为什么要除以最后的点?P/S 我在数学上有真正的困难,我不是在胡闹 :-( 但我猜测测试很顺利,用100手放最小,用10000手不同的时候,所以工作很好...再次感谢您的帮助...
我已经修复了字符串,测试开始了--非常感谢你们!"。只是不明白为什么从iATR中获取止损点到一个变量时,为什么要除以最后的点?P/S 我在数学上有困难,我不是在胡闹 :-( 但我猜测测试很顺利,在100个存款的时候,很多是最小的,而在10000个存款的时候,一直是不同的,所以它是可行的...再次感谢你的帮助...
ATR给出的是一个十进制数字,如0.00120
razmer_fikc_sl是一个整数。
为了计算地段,你需要点,也就是整数
ATR/Point给出一个整数
这是个老话题,但我找不到解决办法。如何指定时间段(例如,从12:00到14:00),并且只在这个时间段开出满足某些条件(例如,RSI<30)的订单。
第一个条件--时间已到
第二个条件--rsi
第三个条件--历史上没有这样的订单,在开盘价的区间内
下午好。
有一个指标Elliott Wave Oscillator,它提供变量EWO的数值。有高于零的正EWO和低于零的负EWO。
从过去100个EWO读数中,有必要计算正EWO的平均值,并分别计算负EWO的平均值。
我从指标中获取数值 double EWO=iCustom(Symbol(),0, "Elliott Wave Oscillator",0,0)。
请告知哪个mql4代码可以在EA中实现这一点?
我设法找到了模数的平均值。
double avarage_EWO = 0;
for(int g=0;g<100;g++)
avarage_EWO = avarage_EWO +MathAbs( iCustom(Symbol(),0, "Elliott Wave Oscillator",0,g) ) ; // modulo average
avarage_EWO = avarage_EWO/100;
但如何分别计算平均正值和平均负值的EWO?
谢谢!
获利",所以下了订单
我搞不清楚ORDER_REASON_TP 是怎么做的,有什么用。
我知道DEAL_REASON_TP 是如何工作的,但我不知道这里的订单是怎么回事