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

 
MakarFX #:

Sì, hai fatto un casino)

Ora in ogni cartella, una per una, rinominate la cartella Experts in _Experts e la cartella Indicators in _Indicators.

Rinominate in una cartella - avviate il terminale, se non è servito - rinominatelo di nuovo e passate alla cartella successiva.

P.S. La prima volta il terminale partirà un po' più lungo del solito.

Makar!

L'evento è accaduto oggi. Pertanto, non ho toccato le cartelle con vecchie date.

E fare modifiche alle cartelle fresche non ha cambiato nulla.

Così ho trascinato profili, indicatori e Expert Advisors in un altro terminale. Finalmente ho finito il casino.

Ora tutto funziona. Però ce l'ho su un altro terminale. Ma la cosa importante è il risultato: si può lavorare.

Cancellerò quel terminale più tardi.

Penso che il tuo suggerimento di trovare gli indicatori e i profili tramite l'editor sia perfetto!

Soprattutto per questi "manichini" della programmazione, come me.

Grazie mille per il vostro aiuto e la vostra reattività!

Buona fortuna!

Saluti!

 

Ciao a tutti. Sto cominciando a capire tutto su questo per dire subito che sono più verde del verde. Non so quanto tempo ho a disposizione, ma farò un po' di esperienza. Potete dirmi chi ha affrontato questa situazione? Ho bisogno di uno script o di un codice che tenga d'occhio i prossimi 10 punti su e giù e nessun Buy e Sell aperto.

1.....Per esempio un tick è venuto - il codice guarda se nei prossimi 10 punti giù e (o) fino l'ordine non è, quindi impostare un ordine di vendita. se sì, allora niente. Anche con un ordine di acquisto

Ecco unoschema di esempionel Forex EA Generator



File:
hktrabmcw4.jpg  222 kb
 
valentin104 uno script o codice che tenga d'occhio i prossimi 10 punti su e giù e nessun Buy e Sell aperto.

1.....Per esempio un tick è venuto - il codice guarda se nei prossimi 10 punti giù e (o) fino l'ordine non è, quindi impostare un ordine di vendita. se sì, allora niente. Anche con un ordine di acquisto

Ecco unoschema di esempionel Forex EA Generator



Questo schema è idiota.

 
Artyom Trishkin #:

È uno schema idiota.

No, sembra così senza if e else). Ma non è quello che intendevo.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)

Lo script dà tick_s =1.0 tick_vflue =80.32786885245902, ma nel gufo tick_value =80.37529660186777 tick_size =1e-05

Il punteggio si rompe.




 
Artyom Trishkin #:

È uno schema idiota.

Non hai capito il punto.

valentin104 #:

Ciao a tutti. Sto appena iniziando a capire tutto questo, quindi dirò solo questo Sono più verde del verde.

 
Galim_V #:

No, sembra così senza if e else). Ma non è quello che intendevo.

Lo script dà tick_s =1.0 tick_vflue =80.32786885245902 e nel gufo tick_value =80.37529660186777 tick_size =1e-05

Il tick_value è rotto.




tick_size =1e-05

Normalizzare DoubleToString( tick_size , 2)

 
MakarFX #:

tick_size =1e-05

Normalizzare DoubleToString( tick_size , 2)

Zeri tutti soli. Neanche un centesimo.

//+------------------------------------------------------------------+
//|                                                     MAX+risk.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property script_show_inputs
enum Mani
  {
   free_margin,
   balans
  };
input Mani risk_mani;
input double Lot=0.0;
input int max_risk =0; //В% от свободных средсв или...
input int stoploss=300;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double Lots=0;
   int    Max_Risk=0;

   printf("ACCOUNT_MARGIN_FREE =  %G",AccountInfoDouble(ACCOUNT_MARGIN_FREE)); //Размер свободных средств на счете  в валюте
   printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE)); //Баланс счета в валюте депозита
   printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));    // Уровень залоговых средств в %

   double freemani=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   double balance=AccountInfoDouble(ACCOUNT_BALANCE);
   double tick_s =  SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)/_Point;  //Минимальное изменение цены
   double tick_value= SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE);//Размер минимального изменения цены инструмента в валюте депозита
   if(risk_mani==balans)
     {
      if(max_risk>0&&stoploss>0)
        {
         double tmp= balance*max_risk/100/(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE));
         Lots=NormalizeDouble(tmp,2);
         printf(" Чтобы max_risk был не более %f%s%d%s%f",max_risk," в % от ACCOUNT_BALANCE при stoploss =",stoploss,",неоходим Lots =",Lots);
        }
      if(Lot>0)
        {
         Max_Risk= (int)MathRound(Lot*(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))/balance*100);
         printf(" Max_Risk при Lot=%f%s%d,%s%d%s",Lot," и stoploss =",stoploss," будет =",Max_Risk,"%");
        }
     }
   if(risk_mani==free_margin)
     {
      if(max_risk>0&&stoploss>0)
        {
         double tmp= freemani*max_risk/100/(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE));
         Lots=NormalizeDouble(tmp,2);
         printf(" Чтобы max_risk был не более %f%s%d%s%f",max_risk," в % от ACCOUNT_MARGIN_FREE при stoploss =",stoploss,",неоходим Lots =",Lots);
        }
      if(Lot>0)
        {
         Max_Risk= (int)MathRound(Lot*(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))/freemani*100);
         printf(" Max_Risk при Lot=%f%s%d,%s%d%s",Lot," и stoploss =",stoploss," будет =",Max_Risk,"%");
        }
     }
   Print("Lots =",Lots," Max_Risk =",Max_Risk," tick_s =",tick_s," tick_vflue =",tick_value);
  }
//+------------------------------------------------------------------+

Qui funziona. Nella scheda, variabili invece di funzioni. Ma già dall'inizio la funzione genera assurdità in OnTick().

 
Galim_V #:

Tutti zeri. Non è riuscito a trovare nemmeno un centesimo.

Qui funziona. In owl, variabili invece di funzioni. Ma la funzione genera già delle sciocchezze in OnTick().

Trovato. Mi dispiace. Il valore di tick_size =1e-05 è 0,00001 ed è corretto.

 
valentin104 #:

Te lo dico subito, sono più verde del verde. Non so quanto durerò.


Con questo approccio all'apprendimento della programmazione, è meglio assumere un programmatore e non doversene preoccupare.

 

Abbiamo un indicatore ZigZag standard, ma il suo stile di disegno della linea è DRAW_SECTION, cioè lamaggior parte dei valori nel buffer dell'indicatore è uguale a EMPTY_VALUE e solo a volte appaiono valori diversi (punti di rottura) che servono come base per il disegno della linea. Credo che tutti abbiano visto questo indicatore e/o il suo codice almeno una volta nella vita.

Il compito è quello di ottenere il valore che corrisponde all'ultimo punto di rottura, cioè l'ultimo valore del buffer dell'indicatore che non è uguale a EMPTY_VALUE.

Attenzione: è l'approccio giusto per fare un ciclo attraverso i valori del buffer dell'indicatore, partendo da uno spostamento di zero verso il basso, chiamando la funzione iCustom ad ogni iterazione, finché il valore ottenuto è diverso da EMPTY_VALUE?

O c'è un modo più semplice per ottenere questo valore?