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

 
Maxim Kuznetsov:
Sembra che il testo originale provenga da un universo parallelo, sia stato tradotto due volte da google-translate e poi raccontato da Alice :-)

Ok. C'è una funzione che può essere usata per trovare l'ultimo lotto. Si chiamaFindLastLots. Ma voglio fare una funzione che non cerchi solo l'ultimo lotto, ma con l'aiuto della quale si possano cambiare i Lotti. Cioè, se extern lots = 0,01; voglio cambiare lots = 0,01, diciamo, a 0,04 usandoquesta funzione. E qui ho bisogno di aiuto per capire come può essere implementato in generale.

double FindLastLots()
  {
   double oldlots=0;
   int oldticket;
   int ticket=0;

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               oldlots= OrderLots();
               ticket = oldticket;
              }
           }
        }
     }
   return(oldlots);
  }
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 
Corvin85:

...

cambiare lotti = 0,01, diciamo a 0,04. Senza usare la moltiplicazione.

...

Bene... se la moltiplicazione è un problema, puoi ottenere il risultato che vuoi aggiungendo.

 
Alexey Viktorov:

Bene... se la moltiplicazione è un problema, puoi ottenere il risultato che vuoi aggiungendo.

-:)

senza dire
 
Posso aggiungere un ciclo while a questa funzione, in modo da poter passare attraverso la variabile esterna una per una negli ordini selezionati? Ma come posso poi estrarre il "valore di ritorno" e usarlo?
 
Alexey Viktorov:

Bene... se ci sono problemi con la moltiplicazione, si può ottenere il risultato desiderato con l'addizione.

Capisco il tuo sarcasmo, ma nei casi di moltiplicazione o di calcolo, ci dovrebbero essere tanti moltiplicatori quante sono le variabili esterne Lotti. Non è una via d'uscita dalla situazione. Anche se sarò onesto, ci ho pensato...

 
Ciao!!! sto facendo un EA basato su un timeframe M5.... ma i segnali vengono attivati (per esempio alle 9:33, 12:11) ecc..... potete dirmi come aprire un ordine su una nuova candela se il segnale era su quella corrente?
 
Corvin85:

Capisco il tuo sarcasmo, ma nei casi di moltiplicazione o di calcolo, ci dovrebbero essere tanti moltiplicatori quante sono le variabili esterne Lotti. Non è una via d'uscita dalla situazione. Anche se sarò onesto, ci ho pensato.

Ora non ricordo i dettagli, ma mi è stato ordinato qualcosa di complicato nel calcolo dei Lotti. Di conseguenza, è stata trovata una formula con la quale è stato fatto il calcolo.

Forse faresti meglio a dichiarare l'ordine in dettaglio? Allora qualcuno può suggerire questa formula.

 
Alexey Viktorov:

Ora non ricordo i dettagli, ma mi fu ordinato di fare qualcosa di elaborato nel calcolo del lotto. Il risultato è stato una formula che è stata usata per calcolarlo.

Forse faresti meglio a dichiarare l'ordine in dettaglio? Allora qualcuno può suggerire questa formula.

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot  = 0.01;
extern double Lot2  = 0.02;
extern double Lot3  = 0.05;
extern double Lot3  = 0.07;
//----------- И так далее-------//

Ci sono diverse variabili esterne di Lot. Se un ordine viene chiuso da Stop Loss, viene aperto un nuovo ordine con il nuovo lotto specificato nella variabile esterna. (Forse, è così che avremmo dovuto scriverlo in origine). Solo che non so come scriverlo correttamente nel codice. E come ho scritto sopra, nessuna moltiplicazione o calcolo, nessun moltiplicatore esterno aiuterà. Dobbiamo in qualche modo passare attraverso i dati degli ordini chiusi...

 
Corvin85:

Ci sono diverse variabili esterne Lot. Se un ordine viene chiuso da StopLoss, allora si apre un nuovo ordine con un nuovo lotto, che è specificato nella variabile esterna. (Forse, questo avrebbe dovuto essere originariamente scritto in questo modo) Ed ecco l'intoppo. Solo che non so come scriverlo correttamente nel codice. E come ho scritto sopra, nessuna moltiplicazione o calcolo, nessun moltiplicatore esterno aiuterà. Abbiamo bisogno di recuperare in qualche modo i dati dagli ordini chiusi ...

Quando apri un ordine, scrivi il numero della regola/variabile nel commento.

poi quando controlli la storia - prendi questo numero, aggiungi 1 ad esso e ottieni un nuovo numero di regola

 
Corvin85:

Ci sono diverse variabili esterne Lot. Se un ordine viene chiuso da StopLoss, allora si apre un nuovo ordine con un nuovo lotto, che è specificato nella variabile esterna. (Forse, questo avrebbe dovuto essere originariamente scritto in questo modo) Ed ecco l'intoppo. Solo che non so come scriverlo correttamente nel codice. E come ho scritto sopra, nessuna moltiplicazione o calcolo, nessun moltiplicatore esterno aiuterà. Dobbiamo passare attraverso i dati degli ordini chiusi in qualche modo.

Sperimentate con questo codice, forse questo è ciò di cui avete bisogno

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict

input double Lot_01  = 0.1;
input double Lot_02  = 0.2;
input double Lot_03  = 0.3;
input double Lot_04  = 0.4;
input double Lot_05  = 0.5;
input double Lot_06  = 0.6;
input double Lot_07  = 0.7;

double GetNextLot(const double last_lot)
{
   if(last_lot>=Lot_07) return(Lot_07);
   if(last_lot>=Lot_06) return(Lot_07);
   if(last_lot>=Lot_05) return(Lot_06);
   if(last_lot>=Lot_04) return(Lot_05);
   if(last_lot>=Lot_03) return(Lot_04);
   if(last_lot>=Lot_02) return(Lot_03);
   if(last_lot>=Lot_01) return(Lot_02);
   return(Lot_01);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print(Lot_01," ---> ",GetNextLot(Lot_01));
   Print(Lot_02," ---> ",GetNextLot(Lot_02));
   Print(Lot_03," ---> ",GetNextLot(Lot_03));
   Print(Lot_04," ---> ",GetNextLot(Lot_04));
   Print(Lot_05," ---> ",GetNextLot(Lot_05));
   Print(Lot_06," ---> ",GetNextLot(Lot_06));
   Print(Lot_07," ---> ",GetNextLot(Lot_07));
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
void OnTick()
  {

   
  }
//+------------------------------------------------------------------+

2019.11.28 22:31:26.409 tst EURUSD,H1: 0,7 ---> 0,7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0,6 ---> 0,7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0,5 ---> 0,6

2019.11.28 22:31:26.409 tst EURUSD,H1: 0,4 ---> 0,5

2019.11.28 22:31:26.409 tst EURUSD,H1: 0,3 ---> 0,4

2019.11.28 22:31:26.409 tst EURUSD,H1: 0,2 ---> 0,3

2019.11.28 22:31:26.409 tst EURUSD,H1: 0,1 ---> 0,2

Nella mia funzione GetNextLot() si inserisce il volume dell'ultimo ordine chiuso, e restituirà il prossimo valore dell'impostazione Lot_XX

l'unica limitazione in questo codice è che le impostazioni dei lotti devono essere in ordine crescente - penso che il codice sia semplice e diretto, potete modificarlo per soddisfare le vostre esigenze

Motivazione: