[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 686

 

itum:

如何解决这个问题?嘎

只需在小节开始时做一次条件处理。

或者,运行一个标志,如果下了订单就会被设置,当条件发生重大变化时就会被重置。

 

Уважаемые програмисты.

请告诉我在代码中插入什么(如果可能的话,在哪里插入),使EA在前一次交易亏损的情况下,用前一次的手数乘以2来开仓。

非常感谢你。

我只想问你一个问题:如果我想用这个EA开仓,我应该怎么做?

 
寻找代号为Martingale的EA。
 

Roger:
Ищите советники с кодовым названием Мартингейл.

我一直在寻找一个,但它对我不起作用。

我找到了一个,如果之前的交易是亏损的,它应该翻倍,但它不想工作。


 
这可能意味着,如果这里向你提供代码,你仍然不能自己把它放到你的EA中,对吗?
 
Roger:
这可能意味着,如果这里向你提供了代码,你仍然无法自己将其插入到你的EA中,对吗?

不,这意味着该EA不工作,而我找不到一个有我需要的那段代码的工作。
 
 
cyclik33:

不,这意味着EA不工作,而我找不到一个有我需要的那段代码的工作。

全局变量 中设置该批次的初始值。

extern double Lot = 0.1

在那里,我们把这个值分配给变量,它将把手数值传递给开仓函数。

double Lots_New = Lot;
平仓后,让我们检查一下它的盈亏情况:
if (isLossLastPos(NULL, -1, Magic))
   Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, Magic))
   Lots_New = Lot;

嗯,这个功能本身,感谢伊戈尔-金...

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

cyclik33:

亲爱的程序员们。
请告诉我在代码中插入什么(如果可能的话,在哪里插入),使EA在前一次交易亏损的情况下,用前一次的手数乘以2来开仓。
我预先感谢你。
Boris.

鲍里斯,这一点都不难,这里有一个简单的函数,可以实现马丁格尔原理。

//+------------------------------------------------------------------+
double getMartinLot(double lot, double x){         //ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
   }else{
      save_Lot *= x;                               //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ НА Х РАЗ
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+

传递初始体积(双批)和步骤(双 x)作为参数。
将该方法直接插入OrderSend中,而不是体积 参数。

函数调用 的例子。

if(OrdersTotal() == 0){
   OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, 2), Ask, 10, Bid-25*Point, Bid+25*Point);
}
 
有谁知道有什么指标可以返回最近几个ZigZag极值?
原因: