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

 
danya-asg:

Ho capito il mio errore, ma non ho capito come risolverlo. Il compito viene normalmente avviato ogni secondo, ma il tempo dall'inizio della candela corrente non viene contato correttamente.

La funzione Seconds() emette i secondi dai dati dell'ultimo tick conosciuto, ma ho bisogno di contare in qualche modo il numero reale di secondi dall'apertura della candela dei minuti nel momento in cui la funzione viene chiamata, anche se non ci sono stati tick negli ultimi due secondi.

TimeSeconds (TimeLocal()) o ( TimeLocal() - Time[0]) non funzionerà, perché l'ora locale può differire dal server di diversi secondi. Come risolvere il problema?


AveteOnTimer() che gira ogni secondo,

void OnTimer()
{
OnTick(); //-- старт каждую секунду
}
 
Alekseu Fedotov:


AveteOnTimer() che gira ogni secondo,


Ma per un corretto funzionamento del programma ho bisogno che mostri il tempo del server ogni secondo, e qui dipende dal fatto che il prossimo tick sia arrivato o meno. Se non lo fa, allora ontimer viene avviato ma mostra un tempo in ritardo, questo è il problema.
 

L'unica cosa che mi è venuta in mente finora, ma è un po' storta:

int sek
void OnTick()
{
if(Seconds() > sek)
sek = Seconds ();
Clicker (); //-- старт каждый тик
}
void OnTimer()
{
sek = TimeSeconds(TimeLocal());
Clicker (); //-- старт каждую секунду
}

E per farlo, ho dovuto impostare il computer per sincronizzare l'ora ogni 10 minuti.

 
danya-asg:

L'unica cosa che mi è venuta in mente finora, ma è un po' storta:

E per fare questo, ho dovuto impostare il computer per sincronizzare l'ora ogni 10 minuti.


Dovete fare un timer di 100-200ms al millisecondo, e lavorare interamente al suo interno.
I secondi sono troppo lunghi e scivolano spesso.

EventSetMillisecondTimer(200);
GetTickCount();
 

Non ho idea di cosa fare all'inizio, nel mezzo e alla fine. Il problema è fare un gufo su un indicatore, e lo stop per trascinare 2 candele dopo l'ingresso, se l'affare va contro la tendenza corrente, poi chiudere l'affare e aprire un'inversione, invertendo lo stop allo stesso modo. Non ho idea di come fare una costante 20 e 80 come punto di entrata e uscita.

File:
f9h46khtl1.png  29 kb
 
novikov433:

Non ho idea di cosa fare all'inizio, nel mezzo e alla fine. Il problema è fare un gufo su un indicatore, e lo stop per trascinare 2 candele dopo l'ingresso, se l'affare va contro la tendenza corrente, poi chiudere l'affare e aprire un'inversione, invertendo lo stop allo stesso modo. Non ho idea di come fare una costante 20 e 80 come punto di entrata e uscita.

Perdonami, idiota ubriaco... Ma ti dirò questo: se sei così sicuro che "questo TS non fallirà" cosa ti impedisce di guadagnare 20 dollari manualmente e ordinare questo EA ai freelance? Vi assicuro che la maggior parte delle persone decenti lì non distribuirà questo TS, tanto meno il consigliere da qualche parte...
 
Alexey Viktorov:
Perdonami, idiota ubriaco... Ma ti dirò questo: se sei così sicuro che "questo TS non fallirà", cosa ti impedisce di guadagnare 20 dollari manualmente e ordinare questo EA su freelancer? Vi posso assicurare che la maggior parte delle persone decenti lì non distribuirà questo TS, tanto meno consigliere da nessuna parte ...

Voglio imparare a fare un EA. Forse il mercato cambierà e dovrò pagare di più, per esempio, per cambiare un po' l'algoritmo?

Non so se posso davvero farcela con qualche costruttore di gufi, ma preferirei capire le funzioni di base come fare una fermata in un certo posto o ordinare il trading in certi giorni.

Non so perché dovrei fare 1,2,3 ecc. anche nel costruttore e perché dovrei collegare tutto con le frecce in tale ordine. Chi in generale studia mql 4 e non crea corsi come i guerrieri di Internet che non hanno niente da spiegare perché succede così, in parole povere, non farai niente di nuovo da solo e dovrai copiare il loro codice .... Voglio dire, sanno quale ordine è responsabile di cosa, e non hanno puntato a caso ..... Bene, lasciate che i professionisti facciano piramidi, lotto dinamico, smart stop; il mio compito è diverso - scaricare i filtri necessari e capire l'essenza della formazione del trend. Grazie per il vostro aiuto!

 
novikov433:

Voglio imparare a fare un EA. Forse il mercato cambierà e dovrò pagare di più, per esempio, per cambiare un po' l'algoritmo?

Per quanto riguarda la possibilità di fare un TS con qualche costruttore di gufi, dovrebbe essere realistico capire le funzioni di base come fare uno stop in un certo posto o ordinare il trading in certi giorni.

È realistico scrivere TOR per ATC, e nel TOR specificare che sarebbero commentate tutte le linee - si pagherà un po' di più, ma si vedrà come e cosa funziona, e poi, gradualmente si faranno modifiche nel codice di lavoro e guardare i cambiamenti - e così inizierà l'autoformazione.
 
novikov433: ... vogliono ... capire come fare un EA ... voglio capire come fare un EA ... voglio capire come fare un EA ... ma questo EA non dovrebbe essere veramente perdente perché gli ordini in perdita sono spostati a Breakeven e devo solo aspettare che il trend si muova ... quindi ci sto già lavorando ...
Caro novikov433! Conoscendo le caratteristiche simboliche del robot di trading, devi stare attento quando scrivi il tuo robot di trading, e devi stare attento quando scrivi il tuo robot di trading! Si può usare un semplice esempio. Do un ordine a mia moglie (ordine): compra un secchio di patate la mattina presto al mercato, e alle 10 (analisi fondamentale) il prezzo sale - vendi. Ma a volte un camion di patate arriva alle 10:30 (notizie). E il prezzo (sulla notizia) scende immediatamente e dura fino alla fine della giornata, o anche per tutta la settimana. Metto uno Stop Loss - se il prezzo scende di 10 rubli, vendo appena posso (al prezzo di mercato). Come cambiare l'ordine, per evitare perdite. Se questa variante è interessante - scrivi la tua email in un messaggio personale.
 
Salve. Per favore, aiutatemi a gestire un errore durante i test sul tester. Durante il test, su tutti i tick, il mio Expert Advisor apre il 1° trade sellstop, la condizione non è stata superata e lo cancella. Il 2° sellstop viene aperto e chiuso anche se la condizione non è stata attivata. Poi nel log appare un tentativo di chiudere buy2, ticket sconosciuto per la funzione orderclose. Sto incollando il codice perché sto lavorando e possono apparire alcune imprecisioni. Il blocco degli ordini è solito
Symb=Symbol();                               
   Total=0;                                     
   for(int i=1; i<=OrdersTotal(); i++)          
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if (OrderSymbol()!=Symb)continue;      
         if (OrderType()>1) continue;
         if (OrderType<=1)                     
            {
             Total++;                               
             if (Total>1)                           
               {
                Alert("Несколько рыночных ордеров. Эксперт не работает.");
                return;                             
               }
             Ticket=OrderTicket();                  
             Tip   =OrderType();                    
             Price =OrderOpenPrice();               
             SL    =OrderStopLoss();                
             TP    =OrderTakeProfit();              
             Lot   =OrderLots();                    
            }
        }

anche il blocco di chiusura non sembra sollevare molte questioni, le condizioni sono state semplificate:

while(true)                                  
     {
      if (Tip==0 && Cls_B==true)                
        {                                       
         Alert("Попытка закрыть Buy ",Ticket);
         RefreshRates();                        
         Ans=OrderClose(Ticket,Lot,Bid,2);      
         if (Ans==true)                         
           {
            Alert ("Закрыт ордер Buy ",Ticket);
            break;                              
           }
         return;                                
        }
 
      if (Tip==1 && Cls_S==true)                
        {                                       
         Alert("Попытка закрыть Sell ",Ticket);
         RefreshRates();                        
         Ans=OrderClose(Ticket,Lot,Ask,2);      
         if (Ans==true)                         
           {
            Alert ("Закрыт ордер Sell ",Ticket);
            break;                              // Выход из цикла закр
           }
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

sarebbe molto apprezzato.