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

 
MakarFX:

Per favore ditemi, è possibile fare questa scelta di carattere in un indicatore?


Perché no? Crea il tuo enum e tutti i problemi.........

 
Alexey Viktorov:

Perché no? Crea il tuo enum e tutti i problemi.........

Questo è chiaro, ma come posso richiedere una lista dei font installati?

 
Nikolai Semko:

Sei un comico.

Con chi stavo parlando?


Mi è sfuggito qualcosa. Grazie. Questo è tutto!

 
ANDREY:

Capito. Grazie per l'aiuto.

Ho anche pensato che fosse difficile per l'EA aprire così tanti ordini. Ho provato a limitare il numero di ordini con questo codice

Cioè, aprire un ordine solo alle 10:00. Ma il risultato è lo stesso.

2020.10.27 10:25:17.548 Core 1 272 Mb di memoria utilizzata inclusi 36 Mb di dati storici, 64 Mb di dati di tick



Non conosco a fondo MKL5, ad essere onesti. Ma la logica è zoppa. È necessario aprire un ordine. Questo si ottiene assegnando una variabile oraria all'inizio della funzione sul tick e alla fine la si assegna a un'altra variabile. Nel mezzo, se le variabili non sono uguali, si apre un ordine. L'esempio precedente con i minuti è lo stesso.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //
int tm; 
//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10 && tm != time_now.hour) //на первом тике, когда time_now.hour станет 10 а tm еще 9
                                           // и на следующем тике tm будет равно 10


   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }  

tm= time_now.hour;
     return;
  }



 
MakarFX:

Questo è chiaro, ma come si fa a richiedere una lista dei font installati?

Credo che nel tuo esempio sia una lista fatta in casa. Senza interrogare il software.

 
Valeriy Yastremskiy:

Non conosco a fondo MKL5, ad essere onesti. Ma la logica è zoppa. È necessario un ordine per aprire lo stesso. Questo si ottiene assegnando una variabile ora all'inizio della funzione sul tick e alla fine la si assegna a un'altra variabile. Nel mezzo, se le variabili non sono uguali, si apre un ordine. L'esempio precedente con i minuti è lo stesso.

ecco perché si raccomanda di provare a fare il lavoro EA solo con i vostri magiks

Se il nostro compito è quello di aprire un ordine ad una certa ora una volta al giorno, allora l'algoritmo è il seguente:

- avviare EA, controlla il numero di ordini aperti, se l'ordine con il nostro mago è aperto, quindi uscire fino al prossimo tick

- se non ci sono ordini, l'EA aspetta che l'ora e i minuti correnti siano maggiori di quelli dati

- questo tempo è arrivato, EA controllerà la cronologia degli ordini e se non è stato piazzato un ordine con il nostro mago nelle ultime 24 ore, allora piazzerà un ordine e uscirà - l'uscita è utile per non elaborare gli errori del server, se l'ordine non è stato piazzato, allora al prossimo tick cercheremo di farlo di nuovo, cioè non abbiamo bisogno di organizzare un ciclo per più aperture di ordini su questo tick.... ma questa è una questione di gusti e obiettivi, è l'implementazione più semplice )))

 
Igor Makanu:

ecco perché si raccomanda di cercare di fare il lavoro EA esclusivamente con i vostri maghi

Se il compito è quello di aprire un ordine una volta al giorno ad una certa ora, l'algoritmo è il seguente:

- avviare EA, controlla il numero di ordini aperti, se l'ordine con il nostro mago è aperto, quindi uscire fino al prossimo tick

- se non ci sono ordini, l'EA aspetta che l'ora e i minuti correnti siano maggiori di quelli dati

- questo tempo è arrivato, EA controllerà la cronologia degli ordini e se non è stato piazzato un ordine con il nostro mago nelle ultime 24 ore, allora piazzerà un ordine e uscirà - l'uscita è utile per non elaborare gli errori del server, se l'ordine non è stato piazzato, allora al prossimo tick cercheremo di farlo di nuovo, cioè non abbiamo bisogno di organizzare un ciclo per più aperture di ordini su questo tick.... Ma questa è una questione di gusti e obiettivi ed è l'implementazione più semplice )))

Non abbiamo ancora raggiunto il livello di mago lì. Naturalmente. In 5 c, naturalmente, il dilemma è se andare in loop con l'analisi degli errori o cercare di aprire una posizione usando un tick. Nel caso di risposte lunghe può essere più facile per la zecca.

 
Valeriy Yastremskiy:

Non conosco a fondo MKL5, ad essere onesti. Ma la logica è zoppa. È necessario un ordine per aprire lo stesso. Questo si ottiene assegnando una variabile ora all'inizio della funzione sul tick e alla fine la si assegna a un'altra variabile. Nel mezzo, se le variabili non sono uguali, si apre un ordine. L'esempio precedente con i minuti è lo stesso.



Grazie mille. La conoscenza che mi hai dato era esattamente ciò che mi mancava. Ho provato a fare lo stesso ma per analogia con il 4. Si scopre che l'analogia è fuori luogo in questo caso.
Grazie ancora.

 
Igor Makanu:

ecco perché si raccomanda di cercare di fare il lavoro EA esclusivamente con i vostri maghi

Se il compito è quello di aprire un ordine una volta al giorno ad una certa ora, l'algoritmo è il seguente:

- avviare EA, controlla il numero di ordini aperti, se l'ordine con il nostro mago è aperto, quindi uscire fino al prossimo tick

- se non ci sono ordini, l'EA aspetta che l'ora e i minuti correnti siano maggiori di quelli dati

- questo tempo è arrivato, EA controllerà la cronologia degli ordini e se non è stato piazzato un ordine con il nostro mago nelle ultime 24 ore, allora piazzerà un ordine e uscirà - l'uscita è utile per non elaborare gli errori del server, se l'ordine non è stato piazzato, allora al prossimo tick cercheremo di farlo di nuovo, cioè non abbiamo bisogno di organizzare un ciclo per più aperture di ordini su questo tick.... ma questa è una questione di gusti e obiettivi ed è l'implementazione più semplice )))

Grazie per le preziose informazioni. Grazie a voi la mia comprensione di mql 5 è aumentata e approfondita.
Vi sarò molto grato se potrete mostrare il mio codice come esempio del vostro processo di pensiero. Mi aiuterà ad assimilare la vostra idea in modo rapido e preciso.
Grazie mille ancora.

Ecco il mio codice, dove ho scritto erroneamente la condizione che un ordine dovrebbe aprirsi solo alle 10:00

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10&&time_now.min==0)
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }
 
ANDREY:

Ecco il mio codice dove ho sbagliato la condizione, secondo la quale l'ordine dovrebbe aprirsi solo alle 10:00

Non scrivo in puro MQL5. È possibile inserire un ordine utilizzando la classe CTrade SB

cercare CTrade per articoli sull'uso di SB

Motivazione: