[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 257

 
dzhini:

Können Sie mir sagen, wie ich die Bedingung für den Tester festlegen kann, um die Bar-Nummer des unteren Zeitrahmens im Text zu bestimmen?

Zum Beispiel: Der Tester beginnt mit H1, dann bestimmt er die Startzeit der n-ten Kerze im Textframe, und der nächste Schritt ist, die Nummer der Kerze zu bestimmen, die zur gleichen Zeit begann, aber durch den Zeitrahmen darunter. iBarShift schreibt immer 0. Der für die Taktberechnung zuständige Block befindet sich weiter unten:

Das ist nicht der richtige Weg. Im Tester müssen Sie die Eule mit der in dieser Eule verwendeten Mindest-TF zu den Eröffnungspreisen ausführen. Es ist besser, die Eule auf den offenen Minuten laufen zu lassen. Und es ist besser, die TF ausdrücklich zu verschreiben!
 
dzhini:
Yuri, können Sie etwas zu meiner obigen Frage sagen?


Skript prüfen

//+------------------------------------------------------------------+
//|                                             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);
  }
//+------------------------------------------------------------------+

Ergebnis

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


 

Ein Ratschlag, bitte:

Ich möchte einen Multi-Timeframe-MA erstellen, der seine Farbe ändert, wenn sich der Trend ändert. Ich habe die Durchschnittspreisanzeige von anderen Zeitrahmen gemacht, aber ich weiß nicht, wie ich das Problem mit dem Farbwechsel lösen kann.

//+------------------------------------------------------------------+
//|                                                      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.:
Das ist nicht der richtige Weg. Im Tester müssen Sie die Eule mit der in dieser Eule verwendeten Mindest-TF zu den Eröffnungspreisen ausführen. Es ist besser, die Eule auf den offenen Minuten laufen zu lassen. Und es ist besser, die TF ausdrücklich zu verschreiben!
Roman, ich versuche, den Indikator im Strategy Tester anzeigen zu lassen. Der Indikator verwendet niedrigere Zeitrahmen für die Analyse.
 
FAQ:
Es wäre besser, wenn Sie den vollständigen Code anzeigen und ihn über die Schaltfläche "SRC" einfügen könnten.

OK, ich werde versuchen, diesen Beitrag mit Code zu versehen.

Ich weiß eigentlich, was ich am Ende erreichen will - ich handele schon lange, aber mit dem Programmieren habe ich erst angefangen, als ich genau wusste, was ich programmieren will.

Mein Ziel ist es nun, einen grünen Pfeil für jeden Balken zu erhalten, der oberhalb aller drei Slips schließt, und einen roten Pfeil für jeden geschlossenen Balken, der unterhalb aller drei Slips schließt, und nur für Balken, die nach dem Anhängen an das Diagramm geschlossen werden. Ich bin nicht an der aktuellen Bar interessiert.

Ich möchte, dass diese Pfeile im Diagramm angezeigt werden, während der Indikator daran angehängt ist und dann entfernt wird.

Ich zeichne die Schieberegler jetzt nur zur Verdeutlichung und werde sie dann aus dem EA entfernen.

Jetzt haben wir einige Schieberegler und Pfeile, aber sie erscheinen und verschwinden jetzt und erscheinen über falschen Balken. Das ist es, was ich nicht verstehe.

Ich glaube, ich habe etwas mit j oder j+1 in den Zeilen 106-111 verwechselt und weiß nicht, an welches Element ich sie binden soll.


Danke, wenn Sie mir einen Tipp geben können.


Aus irgendeinem Grund funktioniert die SRC-Schaltfläche nicht. Ich werde versuchen, die Datei als normale mq4-Datei einzufügen.

Dateien:
t11.mq4  5 kb
 
Vinin:


Skript prüfen

Ich habe mich entschlossen, Ihren Code zu ändern und eine Prüfung für meine Zwecke vorzunehmen (ich habe sie auf H1 ausgeführt).

   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);  
   }

Und hier ist sie

 
dzhini:

Ich habe mich entschlossen, Ihren Code zu ändern und eine Prüfung für meine Zwecke vorzunehmen (ich habe sie auf H1 ausgeführt).

Und das ist es, was ich bekommen habe


Sie checken den Tester ein, indem Sie die Preise öffnen. Roman hat also schon geschrieben, wie man es macht.

 
D.h. wir lassen den Tester auf einem Low-End-TF laufen und ändern alle anderen Logiken im Indikator, um sie an einen High-End-TF anzupassen?
 
ilunga:

Schlusskurs des vorherigen Balkens Close[1]

Herzlichen Dank! Also, der EA handelt durch Ticks, aber kann ich es ändern, um den Handel auf Intervalle (Candlesticks)? Ich bin so verwirrt darüber.
 

Guten Tag zu diesem Thema! Der Indikator kompiliert, aber er zeichnet nichts, und ich weiß nicht, was falsch ist, was ich denken soll, wie ich nach einem Fehler suchen soll. Wie auch immer, der Code funktionierte, ich fügte eine Funktion mit minimalen Änderungen hinzu, aber jetzt tut er gar nichts mehr!!!

Vielleicht liegt das Problem irgendwo in den Deklarationen, die mit dem Gitternetz beginnen, oder vielleicht bin ich zu langsam und bringe es durcheinander... Es hat funktioniert!

//+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.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;
}
Grund der Beschwerde: