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

 

Per favore, aiutatemi. Non riesco a capire il ciclo for(), tutto il tempo dopo l'aggiornamento, a causa dell'offset(iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)) L'indicatore si ridisegna!


//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  clrSilver
#property   indicator_color2  clrRed
#property   indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)
                    );
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+

Molte grazie in anticipo.

 
Alexey Viktorov:

Secondo me, l'approccio non è affatto logico. Perché definire il giorno della settimana? Che differenza fa che giorno è, se la condizione dovrebbe dire "non aprire più di xxx ordini oggi"?

Mi sembra più logico contare gli ordini aperti oggi e specificare la condizione corrispondente.

non c'è una data di apertura dell'ordine nella condizione.


Se lo sai, per favore scrivi come fare)
Non capisco come fare in modo che in un dato giorno non venga aperto più di n-esimo numero di ordini durante tutta la giornata.

 
cripple:

Per favore, aiutatemi. Non riesco a capire il ciclo for(), tutto il tempo dopo l'aggiornamento, a causa dell'offset(iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)) L'indicatore si ridisegna!


Vi ringrazio in anticipo.

Le MA hanno TF diversi. Devi in qualche modo inserire il timeframe superiore nel TF M1, cioè contare le MA due volte con un numero diverso di tick. In questo caso uno stesso valore del periodo più vecchio sarà aggiunto a diversi valori di quello più giovane.

Se si guarda attraverso i si ottengono, per esempio, 10 candele di periodo D1 e 10 M1. Logicamente c'è qualcosa che non va....

Un'altra cosa, se l'indicatore è impostato su M1, funzionerà senza re-brising molto probabilmente

 
Renat Akhtyamov:

Le MA hanno TF diversi. devi in qualche modo inserire il timeframe superiore nel TF M1, cioè contare le MA due volte con numeri diversi di tick.

Passando per i si stanno prendendo per esempio 10 candele del periodo D1 e 10 M1. Logicamente c'è qualcosa che non va....

Sì, hai ragione, ma la mia mente non è ancora abbastanza per capire come far contare correttamente M1
 
cripple:
Sì, hai ragione, ma la mia mente non è ancora sufficiente per capire come far contare correttamente M1

Inoltre dovrà sincronizzare M1 con un timeframe superiore, perché 1 barra di M5 non corrisponderà necessariamente a 5 candele di M1, potrebbe essere 4 o 1.

 
cripple:
Sì, hai ragione, ma la mia mente non è ancora abbastanza per capire come far contare correttamente M1

Prova

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );

tempo della i-esima barra e mettere il numero di barra risultante al posto di i.

 
Potresti dirmi se è possibile usare la tastiera per scorrere le coppie aperte nel terminale di mt4?
 
LRA:
Caro novikov433!!! Ti insegnerò a programmare, o ti scriverò un Expert Advisor gratuito o entrambi!!! In cambio, insegna come gli ordini in perdita si traducono in no-loss. 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. Posto 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, mandaci la tua e-mail.
Il problema è che il mercato è andato leggermente verso il lato richiesto e poi è tornato indietro, quindi è necessario chiudere l'affare a pareggio e aprirlo per un'inversione. Sono diventato dipendente da esso non appena ho iniziato. ancora una volta mi sono convinto che è una stronzata fare trading a mano. come faccio a capire perché ho bisogno di scrivere così tanti componenti in codice?
 
Alexey Viktorov:

Prova

il tempo dell'i-esima barra e mettere il numero di barra risultante al posto di i.


Avete pensato a qualcosa del genere?
//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Averages Convergence/Divergence"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  clrSilver
#property   indicator_color2  clrRed
#property   indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
     {
      int bars=iBarShift(Symbol(),PERIOD_M1,iTime(Symbol(),PERIOD_CURRENT,i),false);
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,bars)
                    );
      Print(bars);
     }
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
ax00071:
Grazie per l'attenzione )) Sono un babbeo ... ... alla chiusura ho avuto la condizione di chiudere l'affare alle 22:00 di venerdì, senza alcuna condizione aggiuntiva per controllare il tipo di affare. L'affare stesso si è chiuso un paio d'ore prima. Bene, quando sono arrivate le 22:00, l'Expert Advisor ha iniziato a inviare ordini per chiudere un ordine che era già chiuso... .
È difficile che tu possa definirti una pianta. Se siete riusciti a localizzare, capire e correggere un tale errore, vi state avvicinando al livello di un programmatore!
Motivazione: