[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 704

 
ToLik_SRGV:

Anche Odysseus, nell'esempio precedente l'avevi così:

E ora è così:

Non hai cancellato nulla, o me lo sto immaginando?
Ecco il codice orinale
 IndicatorBuffers(7);
   SetIndexBuffer(0, MACDBuffer);
   SetIndexBuffer(1, SignalBuffer);
   SetIndexBuffer(2, FastEMABuffer);
   SetIndexBuffer(3, SlowEMABuffer);
   SetIndexBuffer(4, SignalEMABuffer);
   SetIndexBuffer(5, Buffer1);
   SetIndexBuffer(6, Buffer2);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_LINE,EMPTY);
  SetIndexStyle(2, DRAW_LINE,EMPTY,2 );
   SetIndexStyle(3, DRAW_NONE,EMPTY,2);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexStyle(5, DRAW_HISTOGRAM,EMPTY, 2);
   SetIndexStyle(6, DRAW_HISTOGRAM,EMPTY, 2);
   SetIndexDrawBegin(0, SlowEMA);
   SetIndexDrawBegin(1, SlowEMA);
   IndicatorShortName("ZeroLag MACD Colored(" + FastEMA + "," + SlowEMA + "," + SignalEMA + ")");
   SetIndexLabel(0, "MACD");
   SetIndexLabel(1, "Signal");
   SetIndexLabel(5, "MACD");
   SetIndexLabel(6, "MACD");
 
odiseif:
ecco il codice finale
Scusa, errore mio. ..... è l'originale.
//+------------------------------------------------------------------+
//|                                                 ZeroLag MACD.mq4 |
//|                                                               RD |
//|                                                 marynarz15@wp.pl |
//| Colored by SVK © 2009.                                           |
//+------------------------------------------------------------------+
#property copyright "RD"
#property link      "marynarz15@wp.pl"
//----
#property indicator_separate_window
#property  indicator_buffers 7
#property indicator_color1 Black
#property indicator_color2 Blue
#property indicator_color3 Black
#property indicator_color4 Black
#property indicator_color5 Black
#property indicator_color6 Lime
#property indicator_color7 Red

//---- input parameters
extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int SignalEMA = 9;

//---- buffers
double MACDBuffer[];
double SignalBuffer[];
double FastEMABuffer[];
double SlowEMABuffer[];
double SignalEMABuffer[];

double Buffer1[];
double Buffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(7);
   SetIndexBuffer(0, MACDBuffer);
   SetIndexBuffer(1, SignalBuffer);
   SetIndexBuffer(2, FastEMABuffer);
   SetIndexBuffer(3, SlowEMABuffer);
   SetIndexBuffer(4, SignalEMABuffer);
   SetIndexBuffer(5, Buffer1);
   SetIndexBuffer(6, Buffer2);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_LINE,EMPTY);
   SetIndexStyle(2, DRAW_NONE);
   SetIndexStyle(3, DRAW_NONE);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexStyle(5, DRAW_HISTOGRAM);
   SetIndexStyle(6, DRAW_HISTOGRAM);
   SetIndexDrawBegin(0, SlowEMA);
   SetIndexDrawBegin(1, SlowEMA);
   IndicatorShortName("ZeroLag MACD Colored(" + FastEMA + "," + SlowEMA + "," + SignalEMA + ")");
   SetIndexLabel(0, "MACD");
   SetIndexLabel(1, "Signal");
   SetIndexLabel(5, "MACD");
   SetIndexLabel(6, "MACD");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double prev,current;
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0) 
       return(-1);
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars;
   double EMA, ZeroLagEMAp, ZeroLagEMAq;
   for(int i = 0; i < limit; i++)
     {
       FastEMABuffer[i] = 100.0*iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
       SlowEMABuffer[i] = 100.0*iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
     }
   for(i = 0; i < limit; i++)
     {
        EMA = iMAOnArray(FastEMABuffer, Bars, FastEMA, 0, MODE_EMA, i);
        ZeroLagEMAp = FastEMABuffer[i] + FastEMABuffer[i] - EMA;
        EMA = iMAOnArray(SlowEMABuffer, Bars, SlowEMA, 0, MODE_EMA, i);
        ZeroLagEMAq = SlowEMABuffer[i] + SlowEMABuffer[i] - EMA;
        MACDBuffer[i] = ZeroLagEMAp - ZeroLagEMAq;
        FastEMABuffer[i] = 0.0;
        SlowEMABuffer[i] = 0.0;
     }
   for(i = 0; i < limit; i++)
       SignalEMABuffer[i] = iMAOnArray(MACDBuffer, Bars, SignalEMA, 0, MODE_EMA, i);
   for(i = 0; i < limit; i++)
     {
       EMA = iMAOnArray(SignalEMABuffer, Bars, SignalEMA, 0, MODE_EMA, i);
       SignalBuffer[i] = SignalEMABuffer[i] + SignalEMABuffer[i] - EMA;
       SignalEMABuffer[i] = 0.0;
     }
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=MACDBuffer[i];
      prev=MACDBuffer[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         Buffer2[i]=current;
         Buffer1[i]=0.0;
        }
      else
        {
         Buffer1[i]=current;
         Buffer2[i]=0.0;
        }
     }     
   return(0);
  }
//+------------------------------------------------------------------+
 
ToLik_SRGV:

Sergey, non ho capito bene cosa hai cambiato esattamente, perché all'indirizzo che hai fornito è necessario registrarsi per vedere il codice sorgente di CCI Filter.
Ho trovato solo un errore, iWPR non ha un parametro applied_price, quindi è corretto:


Tutti, grazie, ora rrrrrr funziona!!!

 
ToLik_SRGV:

In linea di principio, non c'è differenza.
Provate la mia funzione, è abbastanza semplice, passate il "medj" e il trawl desiderato come parametri.
Questa funzione dovrebbe essere chiamata all'inizio in qualsiasi punto, purché inizi con ogni tick.

Ovviamente, gli ordini devono avere cursori diversi.

Roger:
Ho capito, si definisce una variabile ro all'inizio della funzione, ma non la si assegna da nessuna parte, cioè è 0.

ToLik_SRGV, grazie, ancora non funziona correttamente. Significa che ho il posto sbagliato per nascondere il problema. Grazie comunque, lo capirò da solo.Roger,
 

Come al solito qui ))) Come al solito alla brava gente )))

Qual è il problema, non riesco a capirlo. Problemi con le variabili globali. Lo faccio nel codice dell'indicatore:

string Global="Global"; //имя глобальной переменной
int param; // параметр глобальной переменной
int init()
  {
  GlobalVariablesDeleteAll(NULL); 
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  { //привожу простой пример
  double bar1= iMA(Symbol(),PERIOD_M5,13,0,MODE_SMMA,PRICE_TYPICAL,0);
  double bar2= iOpen(Symbol(),PERIOD_M5,0);
   if (bar1>bar2){ param = 1; GlobalVariableSet(Global,param); }
   if (bar1<bar2){ param = 2; GlobalVariableSet(Global,param); } 

//----
   return(0);
  }

Poi cerco di ottenere il valore di una variabile globale da un Expert Advisor con questo codice

string Global="Global";  
int param;

int start()
  {
  int i= GlobalVariableSet(Global,param);
  Print (i);   // Здесь он мне и выводит всякую лабуду вида : 1279217736


   return(0);
  }
Cosa sto facendo di sbagliato? Avrei dovuto ottenere 1 o 2 valori di parametro, ma ho ottenuto ..... E perché devo scrivere di nuovo il nome e la variabile all'inizio del codice EA? Sembra che esistano come globali, ma la compilazione non funziona senza di loro.
 

Posso aprire due posizioni BUY/SELL simultaneamente?

Ho provato - ho scritto un semplice codice che apre posizioni BUY e SELL simultaneamente, collegato a EUR/USD in tempo reale, sembrano aprirsi.

Ma quello era un conto demo e un tester di strategia, e in tempo reale, la mia società di intermediazione se la prenderà?

Non ho mai provato prima, non credo di aver iniziato questo tipo di esperimento.

 
Infinity:...
Hai bisogno di un'altra funzione per leggere il valore delle variabili globali:)))
int i= GlobalVariableGet(Global);
 
Lim1:

Posso aprire due posizioni BUY/SELL simultaneamente?

Ho provato - ho scritto un semplice codice che apre posizioni BUY e SELL simultaneamente, collegato a EUR/USD in tempo reale, sembrano aprirsi.

Ma quello era un conto demo e un tester di strategia, e in tempo reale, la mia società di intermediazione se la prenderà?

Non ho mai provato prima, non credo di aver iniziato questo tipo di esperimento.

Aprire... mentre ti lasciano... :)
In generale - chiedete al team di supporto del vostro DC
 
ToLik_SRGV:
Per leggere il valore delle variabili globali abbiamo bisogno di un'altra funzione :)))

Così chiaro, guardare nel libro e non vedere, funziona grazie! Andando avanti) con le domande. Tutto sulle stesse variabili globali. Ho aggiunto la seguente condizione all'indicatore:

string EUR="EURUSD"; //имя глобальной переменной
string GBP="GBPUSD"; //имя глобальной переменной
string valuta="";
int param; // параметр глобальной переменной
int init()
  {
  GlobalVariablesDeleteAll(NULL); 
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  { string symb = Symbol();  //Здесь узнаю на какой валюте стоит индикатор
    
    if (symb==EUR) {valuta=EUR;}   // здесь сравнивая ,в переменную занощу имя глобальной переменной
    if (symb==GBP) {valuta=GBP;}   // которую следует использовать
  //привожу простой пример
  double bar1= iMA(Symbol(),PERIOD_M5,13,0,MODE_SMMA,PRICE_TYPICAL,0);
  double bar2= iOpen(Symbol(),PERIOD_M5,0);
   if (bar1>bar2){ param = 1; GlobalVariableSet(valuta,param); }   // а здесь присваиваю параметр глобальной переменной
   if (bar1<bar2){ param = 2; GlobalVariableSet(valuta,param); } 
   return(0);
  }

Voglio definire a quale variabile globale deve essere assegnato un valore, a seconda della valuta su cui si basa l'indicatore.

Ho capito che nella variabile globale GlobalVariableSet(valuta,param), il nome (valuta) dovrebbe contenere il valore assegnato sopra

richiamare la variabile globale nel codice di Expert Advisor

stringa valuta="valuta";

int i= GlobalVariableGet(valuta); // ma non ottengo il valore, .... Cioè ottengo 0. Forse è impossibile cambiare il nome della variabile globale in questo modo?

Penso di aver capito - risulta che non posso chiamare una variabile globale con questo nome, ma se registro il nome stringa GlobalVariableGet("EURUSD") funziona).

 

In primo luogo, dall'aiuto

doppio GlobalVariableGet( nome stringa)

Restituisce il valore della variabile globale esistente o 0 in caso di errore. Chiama GetLastError() per ottenere informazioni sugli errori.


Puoi vedere il contenuto del GV, ma non puoi recuperarlo?

Motivazione: