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

 
artmedia70:

Qui avete

void OpenBuy() {

double dStopLoss = 0, dTakeProfit = 0;
doppio Lotti_Nuovo = Lotto;

se (isLossLastPos(NULL, -1, MAGIC))
Lotti_Nuovi *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))

Lotti_Nuovo = Lotto;

È una funzione, e all'inizio di questa funzione si assegna alla variabile Lots_New il valore = Lot;

Pensate a come cambierà in seguito se lo riportate sempre al suo stato originale?

Dove ti ho detto di scriverlo? Nelle variabili esterne prima della funzione di avvio...

E normalizzare il valore del lotto alla dimensione corretta:

Lots_New = NormalizeLot(Lot*2, False, "");




Grazie mille!

Può anche dirci se è possibile aggiungere un valore di lotto ad ogni successivo ordine perdente? Puoi usare qualcosa del genere

1 lotto 0,01

2 lotto 0,01

3 lotto 0,02

4 lotto 0,03

5 lotto 0,07

.....

15 lotto 1.2

Essere in grado di cambiare il valore del lotto nel codice.

E che nel caso in cui un accordo si rivelasse redditizio, tutto tornerebbe all'inizio.

Vi ringrazierò in anticipo.

Grazie.

 
Necron:
Roger, grazie, ma ancora non funziona correttamente. Ho provato ad aggiungere un altro trailing stop, ma l'errore è ancora lì :( C'è qualche differenza tra il trailing stop per una posizione e il trailing stop per più posizioni contemporaneamente?

Non c'è differenza di principio.
Provate la mia funzione, è abbastanza semplice, passate come parametri, medjic, e il trawl desiderato.
La chiamata di questa funzione viene eseguita all'inizio, in qualsiasi luogo, purché vi "schizzi" ad ogni tick.

//+------------------------------------------------------------------+
void trailing(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUY){
            if(Bid - OrderStopLoss() > Point*trailing){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
         if(OrderType() == OP_SELL){
            if(OrderStopLoss() - Ask > Point*trailing || OrderStopLoss() == 0){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+

Ovviamente, gli ordini dovrebbero avere cursori diversi.

 
Per favore, ditemi perché non funziona:

OrderSelect(1,SELECT_BY_POS,MODE_TRADES);

codice di errore 4051. C'è un ordine OP_BUY aperto.
File:
ma_1.mq4  3 kb
 
itum:

Aiutatemi a risolvere un problema!


Cerco gli ordini che sono aperti o in sospeso. Se sono disponibili, allora determino quale ordine è comprare o vendere. In certe condizioni (se uno è più grande dell'altro o più piccolo del terzo), voglio chiudere questo ordine. Cambia i suoi parametri e aprilo di nuovo.

Il problema è che c'è sempre un segnale per chiudere l'ordine e per aprirlo. Ecco perché il mio ordine viene chiuso e riaperto, e così si apre e si chiude ... )))

Come risolvere questo problema? Ga
Penso che sia un deja vu... Sono l'unico? Hai già avuto diverse risposte... Eh?
Mettete qui il vostro codice con le condizioni di apertura e apertura. Ci metteremo il dito... :)
 
an11:
Per favore, ditemi perché non funziona:

OrderSelect(1,SELECT_BY_POS,MODE_TRADES);

codice di errore 4051. C'è un ordine OP_BUY aperto.

Il conteggio dei numeri nella funzione OrderSelect() parte da zero. E tu hai 1, il che significa che stai cercando il secondo ordine, anche se ne hai solo uno sul mercato, per questo non funziona.

 
Vinin:
Potete farlo con i parametri, ma non con i modelli. Bisogna prima definire i criteri. Simile, non simile. E se è simile, in che misura. Almeno di quanto (percentuali). In un caso la componente tempo, nell'altro - quella prezzo. Come correlarli tra loro. Anche se posso allegare uno strato neuronico. Lo strato Kohonen lo fa molto bene.

Ho 12 varianti di un pattern in uno dei miei indicatori, il pattern è lo stesso ma i valori sono sempre diversi e il loro rapporto è diverso ))), ....) Non ho mai lavorato con le reti neurali, penso che la mia esperienza nello scrivere algoritmi elementari usando mql non sarà sufficiente, anche se potrebbe aiutarmi a risolvere il problema. Ho affrontato questo compito prima "barbaramente" sostituendo Kohonen, scrivendo tutti i parametri in Exxel al momento della comparsa del modello e il risultato se l'affare si è aperto, poi utilizzando l'analisi Exxel ho dovuto cercare più partite in correlazione con la redditività. In ogni caso ho ottenuto qualcosa e il sistema ha definito il modello in modo saggio, ma comunque non è stato molto intelligente).
 
cyclik33: ...

Non so che funzione stai usando, ma l'idea generale è questa: dato che il tuo passo non è uniforme, ti suggerisco di usare un array, ci scrivi dentro i volumi che ti servono, e poi usi la funzione per passare attraverso il suo valore.

Esempio sul mio codice:

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
Esempio di chiamata di funzione:
//+------------------------------------------------------------------+
int start()
  {
   double volume[] = {0.1, 0.1, 0.2, 0.3, 0.7};   //создаем массив с объемами

   if(OrdersTotal() == 0){
      OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, volume), Ask, 10, Bid - 25*Point, Bid + 25*Point, "", 777);
   }
}
//+------------------------------------------------------------------+
 
artmedia70:
Credo che sia un De ja vu... Sono l'unico? Ti hanno già risposto diverse persone... Eh?
Mettete il vostro codice con la condizione di apertura e l'apertura della posa. Ci metteremo il dito... :)
Anch'io :))) Valentin, per qualche ragione non vuole mostrare il codice, probabilmente non vuole mostrare le sue idee...
 
ToLik_SRGV:

Non so che funzione stai usando, ma ecco un'idea generale: dato che il tuo passo non è piatto, ti suggerisco di usare un array, ci scrivi dentro i volumi che ti servono, e poi usi la funzione per passare attraverso i valori.

Esempio sul mio codice:

Esempio di chiamata di funzione:

Grazie mille!!!!!

Anche io uso il tuo codice (e a proposito funziona bene), ma ho voluto installare il codice Artemis in un altro EA, prima, perché ho avuto più problemi con esso, e c'era una questione di principio, perché non funzionava correttamente.

Grazie mille ancora !!!! Lo proverò subito!

 

La domanda può essere banale, l'Expert Advisor sta facendo trading su M1, è arrivato il segnale per aprire un ordine, supponiamo che lo stop sia corto e che l'ordine si sia chiuso sullo sl. ma la condizione per aprire esiste ancora.

Qual è il modo migliore per assicurarsi che l'ordine non venga aperto di nuovo nello stesso minuto?