[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 257

 
dzhini:

Puoi dirmi come specificare la condizione per il Tester per determinare il numero di barra del timeframe inferiore all'interno del testo.

Per esempio: il tester inizia con H1, poi determina il tempo di inizio della n-esima candela nel textframe, e il passo successivo è quello di determinare il numero della candela, che è iniziata allo stesso tempo, ma dal timeframe sottostante. iBarShift scrive sempre 0. Il blocco responsabile del calcolo della barra è sotto:

Questo non è il modo di farlo. Nel tester, devi eseguire il gufo sul TF minimo utilizzato in questo gufo ai prezzi di apertura. È meglio far funzionare il gufo sull'aperto su minuti. Ed è meglio prescrivere il TF, esplicitamente!
 
dzhini:
Yuri, puoi suggerire qualcosa sulla mia domanda di cui sopra?


Controllo dello script

//+------------------------------------------------------------------+
//|                                             VininI_CheckTime.mq4 |
//|                                            Copyright 2012, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Vinin"
#property link      "vinin@mail.ru"



//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int TimeFrame[]={PERIOD_MN1, PERIOD_W1, PERIOD_D1, PERIOD_H4, PERIOD_H1,PERIOD_M30, PERIOD_M15, PERIOD_M5, PERIOD_M1};
   int i, pos;
   for (i=0;i<ArraySize(TimeFrame);i++) {
      if (Period()<TimeFrame[i]) continue;
      pos=i;
      break;
   }
   for (i=pos+1;i<ArraySize(TimeFrame);i++) {
      int tmp=iBarShift(NULL, TimeFrame[i], Time[0], true);
      if (iTime(NULL, TimeFrame[i], tmp)<Time[0])tmp--;
      Print("TimeFrame: ",  TimeFrame[i], " TimeOpen: ", TimeToStr(iTime(NULL, TimeFrame[i], tmp), TIME_MINUTES), " Bar: ", tmp);
      
   
   
   }
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Risultato

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 1 TimeOpen: 00:00 Bar: 1057

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 5 TimeOpen: 00:00 Bar: 212

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 15 TimeOpen: 00:00 Bar: 70

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 30 TimeOpen: 00:00 Bar: 35

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 60 TimeOpen: 00:00 Bar: 17

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 240 TimeOpen: 00:00 Bar: 4


 

Un consiglio, per favore:

Voglio fare una MA multi-timeframe, che cambi il suo colore quando il trend cambia. Ho fatto la visualizzazione del prezzo medio da altri timeframe, ma non so come risolvere il problema del cambio di colore.

//+------------------------------------------------------------------+
//|                                                      MA-MTFC.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
//+------------------------------------------------------------------+
extern int MA_TF=1440;
extern int MA_Period=89;
extern int MA_Shift=0;
extern int MA_Method=2;
extern int MA_AP=0;
//+------------------------------------------------------------------+
double Buffer_Yellow[];
double Buffer_Lime[];
double Buffer_Red[];

string Symb;
double MA;

int init()
  {
   Symb=Symbol();
   //---
   if (MA_TF != 1)
    if (MA_TF != 5)
     if (MA_TF != 15)
      if (MA_TF != 30)
       if (MA_TF != 60)
        if (MA_TF != 240)
         if (MA_TF != 1440)
          if (MA_TF != 10080)
           if (MA_TF != 43200)
            if (MA_TF != 0)
             return;
   //---
   SetIndexBuffer(0,Buffer_Yellow);
   SetIndexBuffer(1,Buffer_Lime);
   SetIndexBuffer(2,Buffer_Red);
   //---
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   //---
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   double MA;
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
      
   for(int i=limit-1;i>=0;i--)
    {
      int pos=iBarShift(NULL, MA_TF, Time[i]);
      MA=iMA(Symb,MA_TF,MA_Period,MA_Shift,MA_Method,MA_AP,pos);
      
      Buffer_Yellow[i]=MA;
      Buffer_Lime[i]=MA;
      Buffer_Red[i]=MA;
      
      if(Buffer_Yellow[i]>Buffer_Yellow[i+1])
       {
         Buffer_Red[i]=EMPTY_VALUE;
       }
      else if(Buffer_Yellow[i]<Buffer_Yellow[i+1])
       {
         Buffer_Lime[i]=EMPTY_VALUE;
       }
      else
       {
        Buffer_Red[i]=EMPTY_VALUE;
        Buffer_Lime[i]=EMPTY_VALUE; 
       }
      
    }

   return(0);
  }
 
Roman.:
Questo non è il modo di farlo. Nel tester, devi eseguire il gufo sul TF minimo utilizzato in questo gufo ai prezzi di apertura. È meglio far funzionare il gufo sull'aperto su minuti. Ed è meglio prescrivere il TF, esplicitamente!
Roman, sto cercando di fare in modo che l'indicatore venga visualizzato nello Strategy Tester. L'indicatore utilizza tempi inferiori per l'analisi.
 
FAQ:
Sarebbe meglio se poteste mostrare il codice completo, e incollarlo usando il pulsante "SRC".

OK, cercherò di aggiungere il codice a questo post.

In realtà so cosa voglio ottenere alla fine - ho fatto trading per molto tempo, ma ho iniziato a programmare solo dopo aver capito esattamente cosa voglio programmare.

Il mio obiettivo ora è quello di ottenere una freccia verde su ogni chiusura di barra al di sopra di tutti e tre gli slittamenti e una freccia rossa su ogni barra chiusa che ha chiuso sotto tutti e tre e solo per le barre chiuse dopo aver attaccato al grafico. Non sono interessato al bar attuale.

Voglio che queste frecce siano sul grafico mentre l'indicatore è attaccato ad esso e poi rimosso.

Sto disegnando i cursori ora solo per chiarezza e poi li rimuoverò dall'EA.

Ora abbiamo alcuni cursori e frecce, ma appaiono e scompaiono ora e appaiono su barre sbagliate. È questo che non capisco.

Penso di aver confuso qualcosa con j o j+1 nelle linee 106-111 e su quale elemento fissarli.


Grazie se potete darmi un suggerimento.


Per qualche motivo il pulsante SRC non funziona. Proverò a inserire il file come un normale mq4

File:
t11.mq4  5 kb
 
Vinin:


Controllo dello script

Ho deciso di modificare il tuo codice e fare un controllo per soddisfare i miei scopi (l'ho eseguito su H1).

   for (i=0;i<10;i++) {
      int tmp=iBarShift(NULL, PERIOD_M15, Time[i], true);
      if (iTime(NULL, PERIOD_M15, tmp)<Time[i])tmp--;
      Alert(" TimeOpen: ", TimeToStr(iTime(NULL, PERIOD_M15, tmp), TIME_MINUTES), " Bar: ", tmp);  
   }

Ed eccolo qui

 
dzhini:

Ho deciso di modificare il tuo codice e fare un controllo per soddisfare i miei scopi (l'ho eseguito su H1).

E questo è quello che ho ottenuto


Si controlla il tester aprendo i prezzi. Quindi Roman ha già scritto come farlo.

 
Cioè eseguiamo il tester su un TF di fascia bassa e modifichiamo tutta la logica dell'indicatore per adattarlo a un TF di fascia alta?
 
ilunga:

Prezzo di chiusura della barra precedente Close[1]

Grazie mille! Quindi, l'EA commercia in tick, ma posso cambiarlo per commerciare su intervalli (candele)? Sono molto confuso a questo proposito.
 

Buon giorno a questo thread! L'indicatore compila, ma non disegna nulla, e non so cosa c'è di sbagliato, cosa pensare, come cercare un bug. Comunque, il codice funzionava, gli ho aggiunto una funzione con modifiche minime, ma ora non fa più nulla!!!

Forse il problema è da qualche parte nelle dichiarazioni che iniziano con la griglia, o forse sono troppo lento e incasinato... Stava funzionando!

//+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#import "user32.dll"
   int   PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
#import
#define WM_COMMAND                     0x0111
int delimiter = 0;

#property indicator_chart_window
double ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
 double вершина; 
 double основание_первого_снижения;
 double начало;
 double вершина_волны_3;
 extern int T=4,K=200;
 int timeframe, start ;
 int бар_вершина ;
 int бар_основание_первого_снижения;
 int бар_начало;
int pereklutsatel;
double naklon,linija2; int P;extern int RO=49;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;

   for (int i=limit;i>=0;i--) {
//----
 for ( int J=0;J<=RO;J++){
//----

  // for(int i=Bars; i>=0;i--)
   i=Bars;
      бар_вершина=iHighest( NULL,  timeframe, MODE_HIGH, K, start ) ;
       вершина =High[ бар_вершина ];
       бар_основание_первого_снижения=iLowest( NULL,  timeframe, MODE_LOW,NormalizeDouble ( бар_вершина/2,0), start ) ;
       основание_первого_снижения=Low[ бар_основание_первого_снижения ];
       бар_начало=iLowest( NULL,  timeframe, MODE_LOW,NormalizeDouble (бар_вершина*1.5,0), бар_вершина ) ;
       начало=Low[ бар_начало ];
       
         
  if(начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
  
    НижняячертаBuffer2[бар_начало]=начало;linija2=начало;for(i=бар_начало-1;i>=0;i--){linija2=linija2-naklon;
    
    НижняячертаBuffer2[i]=linija2;
     
   }
    НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
    
    
         for (i=0;i<100;i++){  СинняячертаBuffer3[i]= Open[i];}
          for (i=330;i<500;i++){  СинняячертаBuffer3[i]= Open[i];}

     ВерхняячертаBuffer1[бар_начало]=начало;
     
 double точка4; int бар_точка4;   бар_точка4=iHighest( NULL,  timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ; 
  точка4 =High[ бар_точка4 ];  
   
   if(вершина>точка4){naklon=(начало-точка4)/(бар_начало-бар_точка4);  
   double linija1=начало;for(i=бар_начало-1;i>=0;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
   
double vulf=НижняячертаBuffer2[0];
  if ( vulf==Ask&&vulf==Bid)vulf=1;
  else{ for (vulf=vulf+Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf-Point){
           if ( vulf==Ask&&vulf==Bid){vulf=1;}} 
      for (vulf=vulf-Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf+Point){
           if ( vulf==Ask&&vulf==Bid)vulf=1;} 
              
           
           
           }
           
           
   if (vulf==1){Comment ("  Есть вульв!!! "  , "  timeframe " , timeframe);return(0);  }
    if (vulf!=1&&pereklutsatel==1) {    
   
     if(delimiter<3){delimiter++;Comment(delimiter);return(0);}
   delimiter=0;
    fChangePeriod();P++;
                                 
                   }  } }
//----
   return(0);
  }
//+------------------------------------------------------------------+

void fChangePeriod(){int ii,hwd = WindowHandle(Symbol(),Period());
   switch(Period()){
      case PERIOD_W1    : ii = 33134; break; //PERIOD_D1;
      case PERIOD_D1    : ii = 33136; break; //PERIOD_H4;
      case PERIOD_H4    : ii = 33135; break; //PERIOD_H1;
      case PERIOD_H1    : ii = 33140; break; //PERIOD_M30;
      case PERIOD_M30   : ii = 33139; break; //PERIOD_M15;
      case PERIOD_M15   : ii = 33138; break; //PERIOD_M5;
      case PERIOD_M5    : ii = 33137; break; //PERIOD_M1;
      case PERIOD_M1    : ii = 33141; break; //PERIOD_W1;
   }     
   PostMessageA(hwd, WM_COMMAND, ii, 0);
   return;
}
Motivazione: