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

 
Aleksei Stepanenko:
对不起,我被这里的谈话所吸引,没有注意到...

一个共同的主题,而你的代码总是很有趣...

为自己拿了很多)。

 
Iurii Tokman:
MakarFX

.

 
Iurii Tokman:

用乌克兰语更好地理解技术任务

我还没有达到这个水平,我的母语是俄语 :)

...但我在休闲层面上理解它
 
Aleksei Stepanenko:

我还没有这个水平,我的第一语言是俄语 :)

我来自苏联...我有两种母语)
 
MakarFX:
我来自苏联...我有两种母语)
.
 
MakarFX:
我来自苏联...我有两种母语)

而我们有三个,仍然是surzhik。

 
DanilaMactep:

我对数学不是很在行--我如何在代码中计算从开单到止损的距离,这样我就可以用这个代替sl?

像这样规范化的地段价值

因此,仍然需要了解如何在代码中计算从开盘价到止损的距离?

开盘价 和止损 之间的绝对值应除以价格阶梯。

  int sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;

而这个值sl进入了公式。

考虑到你放了一个由ATR指标计算的止损,这就足以

double lot =MathFloor((Free*MaxRisk/100)/(sl/_Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
而这已经是正常化的批量大小。
 
MakarFX:

买入开盘价

买入止损

扩散

现在我明白了,我只是要明白,我应该给买入和卖出价格分配哪个值。

OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

OrderSend(Symbol(),OP_SELL,lot,Bid,slippages,Ask+sl,Ask-tp ,"ДИВЕРГЕНЦИЯ НА СЕЛ АО"); // ОТКРКЫВВАЕМ СЕЛ ОРДЕР

换句话说,我把Ask分配给买入开盘价,f分配给卖出开盘价,我分配给Bid?

 
DanilaMactep:

在代码中,我以如下方式打开一个订单。

你是说我把Ask分配给买入开盘价,Bid分配给卖出开盘价变量?

OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

从这个功能来看,你已经知道止损了......我不明白问题出在哪里

 
Alexey Viktorov:

开盘价 和止损价之间的差额的绝对值除以价格步长。

而这个sl值将进入公式。

考虑到你放了一个由ATR指标计算的止损,这就足够了

而这将是正常化的地段大小。

我按照你的建议用代码做的。在代码的开头,我有一个条件来选择停止的类型--atp或固定。

if(tip_sl==en_po_atr)
     { //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     //Print("СТОП ПО АТР, ЕГО РАЗМЕР ");
     sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
     else //ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
     Print("СТОП ЛОС ФИКСИРОВАННЫЙ В ПУНКТАХ");
     sl= razmer_fikc_sl*Point; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
     }

然后我评论了我的规范化,并以这种方式分配它

     sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ
     //sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО  ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ

利润计算是代码中的下一步。 那里没有问题,在计算完利润后,我添加了建议我使用的可怕的公式。

double lot =MathFloor((Free*MaxRisk/100)/(sl/Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА КОТОРУЮ МНЕ СОВЕТОВАЛИ

所有的编译都没有错误。但当我运行测试时,日志显示了一个错误,我得到了除以零的结果,测试被停止了。我在哪里搞砸了,或者我哪里做得不对?

测试开始时的错误

原因: