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

 
Non riesco a trovare il comando che ridisegna l'indicatore personalizzato. Se qualcuno lo sa, per favore me lo dica. Grazie in anticipo =)
 
tesla-pip:
Non riesco a trovare il comando che ridisegna l'indicatore personalizzato. Se qualcuno lo sa, per favore me lo dica. Grazie in anticipo =)

L'ho già trovato. Grazie a tutti =)
 

Buon pomeriggio.

Puoi aiutarmi a trovare una formula?

Ho un passo di ricarica SD=100;

se il prezzo è 25, allora per esso il livello di topping out sarà DE=100

se il prezzo è 102, il suo tasso di unità sarà UD=200

se il prezzo è 215, allora il tasso di rabbocco è BP=300

il prezzo è sceso di nuovo a 135, il livello di topping out sarà UD=200

 
TarasBY:

E questo ordine di cose è normale (questi sono i principi del terminale).

Se volete che l'indicatore B cambi le sue indicazioni quando i parametri dell'indicatore A cambiano, fate uno scambio di informazioni tra gli indicatori (può essere un file, variabili globali del terminale, RAM del computer): l'indicatore A passa i suoi parametri inizializzabili durante l'inizializzazione e l'indicatore B controlla periodicamente possibili cambiamenti di parametri dell'indicatore A. Quando rileva dei cambiamenti, l'indicatore B dovrebbe anche perinizializzarsi con nuovi parametri (init() forzata).

Grazie per la tua risposta, ma non posso usarlo perché non capisco tutto e non sono molto bravo a programmare, potresti per favore apportare le modifiche necessarie ai miei codici indicatori.



Il primo codice è l'indicatore A.

Secondo codice-indicatore B.

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
#property  indicator_width2  2
#property  indicator_width3  2
#property  indicator_level1 0.0

//---- input parameters
extern int FastPeriod =5;
extern int LowPeriod  =34;
//---- indicator buffers
double     ExtBuffer0[];
double     ExtBuffer1[];
double     ExtBuffer2[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);
   SetIndexDrawBegin(0,34);
   SetIndexDrawBegin(1,34);
   SetIndexDrawBegin(2,34);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("My_AO");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
      
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd
   for(int i=0; i<limit; i++)
      ExtBuffer0[i]=iMA(NULL,0,FastPeriod,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,LowPeriod,0,MODE_SMA,PRICE_MEDIAN,i);
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
      else
        {
         ExtBuffer1[i]=current;
         ExtBuffer2[i]=0.0;
        }
        
       
     }
//---- done
   return(0);
  }
#property indicator_separate_window
#property indicator_minimum -1.5
#property indicator_maximum 1.5
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property  indicator_width1  2
#property  indicator_width2  2
#property indicator_level1 0.0

//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {  
      
       
    double UP,DN;     
  
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
      { 
        UP=iCustom(NULL,0,"My_AO",1,i+1);               
        DN=iCustom(NULL,0,"My_AO",2,i+1);    
             
        
       if(UP>0)       
         {ExtMapBuffer1[i+1]=1;
          ExtMapBuffer2[i+1]=0;
         }
         
       if(UP<0)       
         {ExtMapBuffer1[i+1]=-1;
          ExtMapBuffer2[i+1]=0;
         }  
         
                              
       if(DN>0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=1;
         }
              
       if(DN<0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=-1;
         }
               
                       
    
    }
//----
   return(0);
 
   }
   
//+------------------------------------------------------------------+    
   

 

L'ultima domanda è stata risolta, la nuova è

Ho il livello di riempimento ricalcolato su ogni barra.

Come faccio a ricordare il livello dell'ultima barra

e usarlo per aprire uno scambio

 
MK07:
Grazie per la tua risposta, ma non posso usarlo perché non capisco tutto e non sono molto bravo a programmare.

Mi stai offrendo di fare per te quello che tu stai 'giocando'. Spiacente, non sono interessato.

E, se state imparando a programmare, è un compito interessante per voi.

 
Buona giornata a tutti. Ho un problema con l'indicatore "CurrencyPowerMeter" e non posso spostarlo in un'altra posizione nella finestra del terminale. Se puoi aiutarmi, sarei molto felice di farlo.
 
Ho deciso di farvi una domanda, forse potete darmi qualche consiglio. Sto scrivendo un indicatore, nell'indicatore elaboro i tick sul timeframe tick (che si apre indipendentemente,questo). Il mio buffer array NON elabora OGNI tick, ma selettivamente (ad esempio, un tick ogni 60 secondi, ma non è necessario). Invece di
int    counted_bars=IndicatorCounted();

Comprendo la seguente costruzione:

extern int sec=60;//объявляем количество секунд
int i;//будет индексом текущей "свечи" (тика)
int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назад
double MyBuffer[];//этот будет на чарте
double MyTemp[];//этот только для подсчётов

int init(){
   IndicatorBuffers(2);
   SetIndexBuffer(0,MyBuffer)
   SetIndexBuffer(1,MyTemp)
   SetIndexDrawBegin(0,14);
   i=Bars-1;
   while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
   i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()
   return(0);
}

int start(){
   double deltaHigh,deltaLow;
   int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)
   if(counted_bars>=i) i=Bars-counted_bars-1;//аналогично
   while(i>=0){//цикл обработчика
      deltaHigh=High[i]-High[i_prev];//к примеру
      deltaLow=Low[i_prev]-Low[i];
      //и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
      i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тика
      while(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
         i--;
      }
   }
...

Ora la domanda. Nella versione pura M1, la prossima cosa è standard.

   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2
   for(i=0; i<=limit; i++){
      MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);

Con cosa sostituire limite e counted_bars? La mia comprensione è,

int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while

(perché il numero di tick in 60 secondi non è costante, cioè, basta scrivere int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_ non funziona).

O mi sbaglio su tutto?

p.s. anticipando una possibile domanda, risponderò: so che sul forex sec!=60 non è applicabile, e sec=60 non ha senso, ma non faccio nemmeno trading sul forex.

 
MK07:
Grazie per la tua risposta, ma non posso usarlo perché non capisco tutto e non sono bravo a programmare, potresti per favore fare le modifiche necessarie ai miei codici indicatori.
Mi scusi, ha una macchina? Se ne avete uno, non lo considerate un lusso, solo una necessità, vero? Se no, non lo lascerai così per il resto della tua vita, vero? Questa è l'età, bisogna saper guidare una macchina. Sono solo un contadino, ma faccio quello che faccio, per me la programmazione non è diversa dal lavoro in giardino, come il lavoro di fabbro, lo stesso lavoro con le mani (vivo in campagna). Una carriola, una carriola o MQL4 sono solo strumenti per me. Forse è percepito diversamente dagli abitanti delle città, non lo so. Variabili globali in manuale qui, funzioni di file standard qui, più veloci queste, ma attraverso WinAPI. Volevo rispondere ieri, ma non l'ho fatto.
 

Buon pomeriggio a tutti!

Sto imparando a usare gli array.

Ho un array, l'ho inizializzato con delle stringhe, cioè massa doppia [3567]={0.85374 , 0.85694 , 0.85974 , .... };

E il programma legge l'array e lo esegue.

Ora ho inizializzato lo stesso array in una colonna

doppio massi[3567]

{

massa [ 0] = 0,85374;
massa [ 1] = 0.85694;
massa [ 2] = 0. 85974;
massa [ 3] = 0.86174;
massa [ 4] = 0,86474;
massa [ 5] = 0,86494;
massa [ 6] = 0,86504;

massa [ 7] = 0,86524;

}

Il compilatore non genera alcun errore ma genera un avvertimento.

'{' - espressione sull'ambito globale non consentita C:\Program Files\Alpari NZ MT4(2)\experts\include\MASSIV.mqh (4, 2)

L'array è dichiarato globalmente come prima (quando era inizializzato con le stringhe e funzionava bene).

 #include <MASSIV.mqh> 


 
int start()
{
 double Price=iOpen (Symbol (),0,0);         
 double SL=NormalizeDouble (Price+3000*Point, Digits);         
 double TP=NormalizeDouble (Price-100*Point, Digits);   

 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика
 double ld_Delta = 0.0010;
 int S = ArrayBsearch(  mass,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 

 int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он  не изменился)

Ci sono solo 2 voci nel registro.

2013.04.12 16:14:44 XXX test iniziato

2013.04.12 16:14:36 XXX EURUSD,H1: caricato con successo


DOMANDA:PERCHÉ IL PROGRAMMA NON LEGGE UN ARRAY INIZIALIZZATO IN UNA COLONNA?

Grazie.

Motivazione: