Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1358

 

MakarFX , che funzione ha questo bind: che funzione svolge?


input int BarTrade = 5; // capisco che questo è il numero dei periodi tracciati di 5.

int TimeBarTrade=BarTrade*Period()*60; // come capisco, perché è moltiplicato per 60?

 
Alexey Belyakov:

MakarFX , che funzione ha questo bind: che funzione svolge?


input int BarTrade = 5; // capisco che questo è il numero dei periodi tracciati di 5.

int TimeBarTrade=BarTrade*Period()*60; // come si capisce, perché è moltiplicato per 60?

BarTrade*Periodo()*60

numero di barre * timeframe corrente * 60 secondi

cioè la quantità di barre convertita in secondi

 
MakarFX:

BarTrade*Periodo()*60

numero di barre * timeframe corrente * 60 secondi

cioè il numero di barre convertito in secondi

Puoi farlo in questo modo.

int TimeBarTrade = PeriodSeconds()*BarTrade;
 
MakarFX:

Se si escludono gli errori relativi a

MODE_STOPLEVEL, MODE_TRADEALLOWED, MODE_MINLOT, MODE_LOTSTEP, MODE_MAXLOT

allora i gufi non colpiranno il server.

Makar, ti ringrazio molto per aver indicato i controlli da fare per evitare di mettere in difficoltà il server e bannare l'EAJ.

Controlli fatti in questo modo

livello mod stop per stop

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL);//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }

livello di stop mod per il profitto

      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL);// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         


Verifica dell'autorizzazione al commercio

//---- ПРОВЕРКА НА РАЗРЕШЕНИЕ ТОРГОВ ПЕРЕД ОТКРЫТИЕМ ОРДЕРОВ
   if(MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
   {// начало есл торговля разрешена
  /*
куча проверок на условия открытия и само открытие ордеров
*/
} // КОЕНЦ ПРОВЕРКИ НА РАЗРЕШЕНИЕ ТОРГОВЛИ
          
          else //ИНАЧЕ ЕСЛИ ТОРГОВЛЯ НЕ РАЗРЕШЕНА 
          
          { // НАЧАЛО ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ 
          
          Print("ТОРГИ НЕ РАЗРЕШЕНЫ- ПЫТАТЬСЯ ОТКРЫТЬ ОРДЕРА НЕ БУДЕМ");
          }  // КОЕНЦ ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ

Controllo del lotto massimo e minimo

Prima ho ottenuto i valori del lotto massimo e del lotto minimo nelle variabili in questo modo

  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ

E poi controllo da qualche parte qui sotto mentre scrivo il Graal

  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

È corretto o mi sbaglio?

Non ho controllato il cambio di passo del lotto perché il lotto è calcolato come percentuale del deposito e lì questo valore è moltiplicato per un punto e normalizzato - questo controllo può essere omesso - giusto, o dovrei farlo comunque? Se dobbiamo ancora controllare come scrivere questo assegno?

Il punto principale di tutti questi controlli è quello di avere sempre il valore corretto di stop, profitto e dimensione del lotto, quindi possiamo generalmente iniziare ad aprire gli ordini. Se tutti questi parametri sono a posto, l'Expert Advisor non disturba il server; ho capito bene?

 
DanilaMactep:

Grazie mille, Makar, per avermi detto quali controlli fare per evitare il server e bannare l'EAJ.


//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ

Ci può essere un errore di 130 qui dovuto allo slittamento.

Io farei questo

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         
 

Ciao a tutti, qualcuno ha avuto un problema con i punti penzolanti sul grafico trovato tramite iHighest/iLowest?

Preistoria: ho una minima esperienza di programmazione, sto scrivendo un indicatore in mql4 che dovrebbe visualizzare i punti sul grafico, trovati dalle condizioni di if e collegarli con delle linee. Logicamente, cerca i punti correttamente, ma li disegna con un offset, poi per 2 barre, poi per 3 barre. Ho allegato anche il file con il codice.


int start()
  {
   int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().
   int n,limit;
   int val_index;
   
  if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.
   if(limit>barsToProcess)
      limit=barsToProcess;

   for(n=0; n<=limit; n++)
     {
      if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3]))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
        }
      else
         if((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3]))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
           }
     }
   return (0);
  }
File:
AZforum.mq4  8 kb
 
azolotta:

Ciao a tutti, qualcuno ha avuto un problema con i punti penzolanti sul grafico trovato tramite iHighest/iLowest?

Preistoria: ho una minima esperienza di programmazione, sto scrivendo un indicatore in mql4 che dovrebbe visualizzare i punti sul grafico, trovati dalle condizioni di if e collegarli con delle linee. Logicamente, cerca i punti correttamente, ma li disegna con un offset, poi per 2 barre, poi per 3 barre. Ho allegato anche il file con il codice.


I punti sono disegnati correttamente, senza un offset.

Se la condizione è soddisfatta e iHighest/iLowest sono più grandi o più piccoli degli attuali High/Low

disegna


 
MakarFX:

i punti sono disegnati correttamente, senza offset

se la condizione è soddisfatta e iHighest/iLowest è maggiore o minore dell'attuale High / Low

poi disegna


Quindi, penso che sto iniziando a capire il mio errore) Quindi, al fine di visualizzare visivamente questi punti nel posto giusto, ho bisogno di inserire qualche contatore separato invece di n per myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? ma come fare questo
 
azolotta:
Così, penso che sto cominciando a capire il mio errore) Si scopre che per visualizzare visivamente questi punti nel posto giusto, ho bisogno di inserire qualche contatore separato invece di n per myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? ma come farlo

No, avete capito bene.

la condizione utilizza due o tre barre della storia,

ecco perché disegna dopo 2-3 barre quando la condizione è soddisfatta

 
MakarFX:

No, avete capito bene.

la condizione utilizza due o tre barre della storia,

ecco perché disegna dopo 2-3 barre quando la condizione è soddisfatta

OK, allora come faccio a rielaborare il codice se ho bisogno, per esempio, di scegliere il massimo più alto delle ultime 3 barre (che soddisfano le condizioni in if) e mettere un punto su di esso (proprio su questo alto!), poi anche trovare il punto basso.