//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает флаг убыточности последней позиции. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
int i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderProfit()<0) return(True);
}
return(False);
}
//+------------------------------------------------------------------+double getMartinLot(double lot, double x){ //ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛАstaticdouble balance_before, balance_after; //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОКstaticdouble save_Lot;
balance_after = AccountBalance(); //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСАif(balance_after >= balance_before){ //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
save_Lot = lot; //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
}else{
save_Lot *= x; //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ НА Х РАЗ
}
balance_before = balance_after; //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫreturn(save_Lot);
}
//+------------------------------------------------------------------+
itum:
如何解决这个问题?嘎
只需在小节开始时做一次条件处理。
或者,运行一个标志,如果下了订单就会被设置,当条件发生重大变化时就会被重置。
Уважаемые програмисты.
请告诉我在代码中插入什么(如果可能的话,在哪里插入),使EA在前一次交易亏损的情况下,用前一次的手数乘以2来开仓。
非常感谢你。
我只想问你一个问题:如果我想用这个EA开仓,我应该怎么做?
Roger:
Ищите советники с кодовым названием Мартингейл.
我一直在寻找一个,但它对我不起作用。
我找到了一个,如果之前的交易是亏损的,它应该翻倍,但它不想工作。
这可能意味着,如果这里向你提供了代码,你仍然无法自己将其插入到你的EA中,对吗?
不,这意味着该EA不工作,而我找不到一个有我需要的那段代码的工作。
看看吧,https://www.mql5.com/ru/forum/104481
不,这意味着EA不工作,而我找不到一个有我需要的那段代码的工作。
在全局变量 中设置该批次的初始值。
在那里,我们把这个值分配给变量,它将把手数值传递给开仓函数。
double Lots_New = Lot;
平仓后,让我们检查一下它的盈亏情况:嗯,这个功能本身,感谢伊戈尔-金...
cyclik33:
亲爱的程序员们。请告诉我在代码中插入什么(如果可能的话,在哪里插入),使EA在前一次交易亏损的情况下,用前一次的手数乘以2来开仓。
我预先感谢你。
Boris.
鲍里斯,这一点都不难,这里有一个简单的函数,可以实现马丁格尔原理。
传递初始体积(双批)和步骤(双 x)作为参数。
将该方法直接插入OrderSend中,而不是体积 参数。
函数调用 的例子。