[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 686

 

itum:

Come risolvere questo problema? Ga

Eseguire la manipolazione della condizione solo una volta all'inizio della barra.

In alternativa, eseguire un flag che viene impostato se viene piazzato un ordine e resettato quando le condizioni sono cambiate in modo significativo.

 

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

Per favore ditemi cosa inserire (e dove inserirlo, se possibile) nel codice per far sì che l'EA apra una posizione con il lotto precedente moltiplicato per 2 se il trade precedente era in perdita.

Grazie mille.

Voglio solo farvi una domanda: cosa devo fare se voglio aprire una posizione?

 
Cerca gli EA dal nome in codice Martingale.
 

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

Ne ho cercato uno ma non funziona per me.

Ne ho trovato uno che dovrebbe raddoppiare un lotto se un trade precedente era in perdita, ma non vuole funzionare.


 
Questo probabilmente significa che se ti viene offerto del codice qui, non puoi ancora metterlo nel tuo EA da solo, giusto?
 
Roger:
Questo probabilmente significa che se vi viene offerto del codice qui, non sarete comunque in grado di inserirlo nel vostro EA da soli, giusto?

No, significa che l'EA non funzionava, e non riesco a trovarne uno funzionante con il pezzo di codice di cui ho bisogno.
 
 
cyclik33:

No, significa che l'EA non funzionava e non riesco a trovarne uno funzionante con il pezzo di codice di cui ho bisogno.

Nelle variabili globali impostate il valore iniziale del lotto:

extern double Lot = 0.1

Lì assegniamo questo valore alla variabile, che passerà il valore del lotto alla funzione di apertura della posizione:

double Lots_New = Lot;
Dopo aver chiuso la posizione, controlliamo il profitto/perdita:
if (isLossLastPos(NULL, -1, Magic))
   Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, Magic))
   Lots_New = Lot;

La funzione stessa, grazie a Igor Kim...

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

Cari programmatori.
Per favore, consigliatemi cosa inserire (e dove inserirlo se possibile) nel codice per far sì che l'EA apra una posizione con il lotto precedente moltiplicato per 2, se il trade precedente era in perdita.
Vi ringrazio in anticipo.
Boris.

Boris, non è affatto difficile, ecco una semplice funzione che implementa il principio della martingala:

//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+

Passa il volume iniziale(doppio lotto), e il passo(doppio x) come parametri.
Inserisci il metodo direttamente in OrderSend invece del parametro volume.

Esempio di una chiamata di funzione:

if(OrdersTotal() == 0){
   OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, 2), Ask, 10, Bid-25*Point, Bid+25*Point);
}
 
Qualcuno conosce un indicatore che restituisce diversi estremi di ZigZag recenti?
Motivazione: