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

 
Tanita Gajduchok:
嗨,我如何在这里做一个排行榜?

顶?

 
问候!

如何写一个这样的函数。

上升烛台的成交量之和应该是下降成交量之和的2倍,例如,过去10个柱子的成交量。

像截图上的那个。


附加的文件:
IMG_9206.PNG  87 kb
 

大家下午好。我正试图将手数计算附在圣杯机上,以便在损失的情况下将手数设定为存款的百分比。换句话说,如果触发了止损,就会损失指定比例的存款,或者如果存款对这个比例来说是小的,那么手数就会被设置为经纪人可能的最小值......我在某个网站上找到了一个做这种事情的脚本,并把脚本代码转给了自己,但手数考虑得不对......我这样做了。在输入变量中,我声明了一个负责最大风险的变量。

extern int MaxRisk=1;// МАКСИМАЛЬНЫЙ % УБЫТКА ПРИ СТОП ЛОССЕ?

然后我在on tick中声明变量。一个变量,存储账户中自由资金的数量。一个符号的点值的变量。经纪人的最小手数的一个变量。一个变量,用于存储经纪人的最大手数的值。还有一个变量,用于存储批量大小的步骤。

  double Free =AccountFreeMargin();// ПОЛУЧАЕМ СВОБОДНЫЕ СРЕДССТВА ДЛЯ РАСЧЁТА ОБЪЁМА ЛОТА
  double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE); //СТОИМОСТЬ 1 ПУНКТА
  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);    // ШАГ ИЗМЕНЕНИЯ РАЗМЕРА ЛОТА

然后计算出在一定的止损下,具有一定风险的手数。止损是由atp或固定的点来计算的--这种计算方法是正确的,因为如果我放了一个固定的手数,那么一切都会很好的打开并发挥作用。批量的计算公式如下。

double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА, КОТОРУЮ Я СОВСЕМ НЕ ПОНИМАЮ((((
  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

 


在所有的计算通过后,打印打印批号的价值来查看它。

Print("ЛОТ ДО НОРМАЛИЗАЦИИ= "+lot);
 lot=NormalizeDouble(lot,Digits());
Print("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);

记录本中显示的内容 批量和止损的记录是什么 - 止损值是正确的,但批量不是((((。

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
DanilaMactep:

大家下午好。我正试图将手数计算附在圣杯机上,以便在损失的情况下将手数设定为存款的百分比。换句话说,如果触发了止损,就会损失指定比例的存款,或者如果存款对这个比例来说是小的,那么手数就会被设置为经纪人可能的最小值......我在某个网站上找到了一个做这种事情的脚本,并把脚本代码转给了自己,但手数考虑得不正确......我做了以下工作。在输入变量中,我声明了一个负责最大风险的变量。

然后我在on tick中声明变量。一个变量,存储账户中自由资金的数量。一个符号的点值的变量。经纪人的最小手数的一个变量。一个变量,用于存储经纪人的最大手数的值。还有一个变量,用于存储批量大小的步骤。

然后计算出在一定的止损下,具有一定风险的手数。止损是由atp或固定的点来计算的--这种计算方法是正确的,因为如果我放了一个固定的手数,那么一切都会很好的打开并发挥作用。批量的计算公式如下。


在所有这些计算之后,我打印出手数价值来检查它。

记录本上所打印的内容可以在***看到

乍一看,这个功能似乎没有问题。你应该在公式中输入的不是订单的止损价格,而是从订单开盘到止损的距离,单位是点。

然后,我们需要将批号归一化为精度,不是_Digits,而是Step -(批号的增量)。 Print应该通过DoubleToString()输出,精度相同,然后你会看到你想看到的东西。

 
DanilaMactep:

大家下午好。我正试图将很多尺寸的计算纳入圣杯机。

我已经做了这个

Order_Lots = NormalizeDouble((AccountBalance()/100*Percen)/(MarketInfo(Symbol(),MODE_TICKVALUE)*Stop_Point)-0.005,2);
 
Alexey Viktorov:

乍一看,这个功能似乎很好。我们唯一应该添加到公式中的是订单开仓到止损点的距离,而不是订单的止损价格。

此外:我们应该将批次的精度归一化,不是归一到_位,而是归一到Step - (批次大小的增量),你应该用DoubleToString()将其输出到Print,并具有相同的精度。

我的数学不是很好--如何计算从开盘到止损的距离,用这个来代替sl?

DoubleToString("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);// ВЫВОД ЗНАЧЕНИЯ ЛОТА
像这样规范化的批价
lot=NormalizeDouble(lot,Step);// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ЛОТА 

因此,如何在代码中计算从开仓到止损的距离,还有待观察。

 
DanilaMactep:

因此,如何在代码中计算从开盘到停止的距离还有待观察?

if(buy)
Stop_Point= (Pric_UP-Loss_UP)/Point+Spread; 
else
Stop_Point= (Loss_DN-Pric_DN)/Point+Spread; 
 
MakarFX:

非常感谢你提供的这段代码,但现在的问题是,在这段代码中,应该用什么类型的变量来声明,又应该给它们分配什么值?我不是巫师,我只是在学习。

 
DanilaMactep:

非常感谢你提供的这段代码,但现在的问题是,在这段代码中,应该用什么类型的变量来声明,又应该给它们分配什么值?我不是一个魔术师,我只是在学习

Pric_UP

公开价格 购买

Loss_UP

买入止损价

   Spread = StrToInteger(DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),0));
扩散
 
Порт-моне тв:
问候!

如何写一个这样的函数。

上升烛台的成交量之和应该是下降成交量之和的2倍,例如,过去10个柱子的成交量。

像截图上的那个。


谁能帮帮我?

原因: