Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 834

 
Pavel Nikiforov:
Per favore, spiega qual è il problema. La funzione dovrebbe esaminare tutte le posizioni aperte e calcolare il numero di posizioni con un dato numero magico. Infatti ne prende solo uno dalla lista aperta da un altro EA con lo stesso Ticket e Magik e quindi il conteggio è sempre =0.

L'ho capito da solo, la selezione deve essere fatta tramitePositionGetSymbol:

//+------------------------------------------------------------------+
int OpenPositions()//проверка открытых позиций по Magic number 
  {
   int count=0;
     for(int z=PositionsTotal()-1; z>=0; z --) // Перебор всех позиций
     {
       if(PositionGetSymbol(z)!=_Symbol) // Найдена позиция с заданным символом
        {
         Print(__FUNCSIG__" позиция не выбрана ",GetLastError()); continue;
        }
      long  ticket = PositionGetInteger(POSITION_TICKET);
            Print(__FUNCSIG__" ТИКЕТ ", IntegerToString(ticket));
      ulong myMN=PositionGetInteger(POSITION_MAGIC);
            Print(__FUNCSIG__" МАГИК ", IntegerToString(myMN));
      if(myMN==Magic)
            count++;
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
Pavel Nikiforov:

L'ho capito da solo, la selezione deve essere fatta usandoPositionGetSymbol:

Non è ben calcolato. Dovete selezionare sul conto hadge utilizzando la funzione PositionGetTicket(i) e poi controllare il simbolo e il magik.

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Торговые функции / PositionGetTicket - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL4 MT4 MetaTrader 4".
 
Alexey Viktorov:

Non è bello capirlo. Dovete selezionare sul conto hadge con la funzione PositionGetTicket(i) e poi controllare il simbolo e il magik.

Sì, così va meglio, anche le altre funzioni erano glitchate nella demo, ma ora funziona.

 

Ciao, potresti consigliarmi su questo indicatore https://www.mql5.com/ru/forum/94447#comment_6780067

Mette dei cerchi rossi e blu sul grafico quando il prezzo cambia drasticamente, cioè quando il prezzo cambia di 4 pip o più,

Ho bisogno che questi segnali vadano solo quando il prezzo cambia di 10 pip o più

File:
1.png  48 kb
 
yesterday35:

Ciao, potresti consigliarmi su questo indicatore https://www.mql5.com/ru/forum/94447#comment_6780067

Mette dei cerchi rossi e blu sul grafico quando il prezzo cambia drasticamente, cioè quando il prezzo cambia di 4 pip o più,

Voglio che questi segnali vadano solo quando il prezzo cambia di 10 pip o più.

Questo indicatore non calcola pips, ma sigma o RMS (root-mean-square deviation). Su un campione degli ultimi N tick (50 di default). Costruisce un canale di 3 sigma. Se il prezzo è saltato fuori dal canale, segnerà questo posto. Ma il problema principale è che la serie iniziale dei prezzi non ha una distribuzione normale con code molto pesanti. In effetti, questo indicatore è un aiuto-giocattolo.

 

Salve.

Sto scrivendo un piccolo programma. Mi trovo di fronte a una situazione completamente incomprensibile.

Nel mio codice ci sono queste due linee. Sono alla fine di OnTester() e non sono nel ciclo.

Print("Мат ожидание ставки  ",MatOgidanieStavk(KKef,VVer,Stavka)," Ставка ",Stavka);
Print("Ставка =",Stavka);

Ed ecco un risultato inaspettato dell'esecuzione di queste linee.

Мат ожидание ставки  447.0461599959392 Ставка -1.0
Ставка =3912.820000338397

Ecco la definizione della funzioneMatOgidanieStavk

double MatOgidanieStavk(double Kef,double Ver,double &BestStavka)
{
 .......... 
   BestStavka=-1;// Первое обращении к этой переменой.
............
return MatOgidanie;
}
 
pivomoe:

Salve.

Sto scrivendo un piccolo programma. Mi trovo di fronte a una situazione completamente incomprensibile.

Nel mio codice ci sono queste due linee. Sono alla fine di OnTester() e non sono nel ciclo.

Ed ecco un risultato inaspettato dell'esecuzione di queste linee.

Ecco la definizione della funzioneMatOgidanieStavk

Stavka è inizializzato prima della stampa?

come si determina che la chiamata è la prima all'interno della funzione?

che risultato si aspettava?

 

Grazie. Ho risolto il problema.

Si è scoperto che la variabileStavka prima della stampa. era uguale a -1. Il suo valore è stato passato nella funzione Print e salvato come copia. La mia funzioneMatOgidanieStavk ha cambiato la variabileStavkastessa, non la sua copia che verrà stampata.

 
È così che dovrebbe essere.

2795/2797 sarà 0. Poiché l'arrotondamento non viene eseguito. O s3 = (doppio)s2/s1; o selezionare doppio per s2 e s1