Zeichnung der H_Linie auf dem höchsten Hoch der letzten 36 Hochs

 

Hallo

ich habe versucht, im Code Folgendes zu schreiben:

wenn K% Linie von stochastic(80,30,30) > 75, schauen Sie 36 Bars zurück (34,shift 2) und zeichnen Sie eine H_line "Tomate" vom höchsten Hoch zum aktuellen Bar.

wenn die K%-Linie der Stochastik(80,30,30) < 25 ist, blicke 36 Balken zurück (34,shift 2) und zeichne eine H_line "olive" vom niedrigsten Tiefpunkt zum aktuellen Balken.

int start()
  {

double stoch;
stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];

/////////////////////////////////////////////////////////////////////////////////
for(high_nr=2;high_nr<36;high_nr++)
{

   if(Bid<high_price && stoch>75)
     {
      ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato",OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+high_price);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for(low_nr=2;low_nr<36;low_nr++)
{
if(Bid>low_price && stoch<25)
   {
   ObjectCreate("olive",OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price);
   ObjectSet("olive",OBJPROP_COLOR,Olive);
   Print ("olive ON"+low_price);
   }
}   
   
   
//----
   
//----
   return(0);
  }

Wenn ich das ausführe, erhalte ich das erste Setup für Tomate und für Olive ok, dann, auch wenn ich in Journal "Tomate ON" verschiedene Preis lvl, bekomme ich nicht neue Tomate Linie auf dem Chart. dasselbe für Olive.

die Idee der ea ist es, diese Linien zu verwenden, um Trades zu öffnen. so, was ich schließlich wollen, ist dies zu haben:

wenn K%>75

zeichnen Linie o höchsten (Vergangenheit 36 Bars).

wenn Linie ON, zeichnen Sie keine weiteren Linien, bis die Linie gelöscht wird.

wenn ein Handel geöffnet ist, wird die Linie gelöscht

wenn kein Handel geöffnet ist und 24 Balken nach dem Balken, der K%>75 bestimmt hat, wird die Linie ebenfalls gelöscht

:)

Da dies mein erster Code ist, den ich in meinem ganzen Leben geschrieben habe, bitte ich Sie, mir zu zeigen, wie ich das Problem angehen soll.

Dankeschön

 

einen anderen Namen benötigen

      ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato " + high_nr,OBJPROP_COLOR,Tomato);
 

nach

   ObjectCreate("olive"+low_nr,OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price);
   ObjectSet("olive"+low_nr,OBJPROP_COLOR,Olive);

setzt der Code 25 Zeilen, auf den gleichen Preis, aber beginnend nicht von Kerze low_nr (die immer 10 ist, spielt keine Rolle, welche die reale Zahl nach stoch <25 ist), aber von Kerze 35.

dasselbe für Tomate.

:(

 

Sobald ein Objekt erstellt wurde, können Sie kein weiteres Objekt mit demselben Namen erstellen.

Deshalb funktioniert es zwar beim ersten Mal, aber danach nicht mehr (in Ihrem ursprünglichen Code).

Wenn Sie nur die letzte Zeile, die die Kriterien erfüllt, in Ihrem Diagramm anzeigen lassen wollen, erstellen Sie die Zeile in init und verwenden Sie dann ObjectMove, um das Objekt zu seinen neuen Koordinaten zu verschieben.

Wenn Sie möchten, dass alle vergangenen Zeilen angezeigt werden,

ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);

Da high_nr die Balkenverschiebung ist, wird sie wahrscheinlich zu einem späteren Zeitpunkt repliziert und funktioniert daher nicht richtig. Verwenden Sie die Datumsangabe im Namen, dann ist er eindeutig.

 
Können Sie präzisieren , was Sie zu erreichen versuchen?
 
cichichan:

Hallo

ich habe versucht, im Code Folgendes zu schreiben:

wenn K% Linie von stochastic(80,30,30) > 75, schauen Sie 36 Bars zurück (34,shift 2) und zeichnen Sie eine H_line "Tomate" vom höchsten Hoch zum aktuellen Bar.

wenn die K%-Linie der Stochastik(80,30,30) < 25 ist, blicke 36 Balken zurück (34,shift 2) und zeichne eine H_line "olive" vom niedrigsten Tiefpunkt zum aktuellen Balken.

Wenn ich das ausführe, erhalte ich das erste Setup für Tomate und für Olive ok, dann, auch wenn ich in Journal "Tomate ON" verschiedene Preis lvl, bekomme ich nicht neue Tomate Linie auf dem Chart. dasselbe für Olive.

die Idee der ea ist es, diese Linien zu verwenden, um Trades zu öffnen. so, was ich schließlich wollen, ist dies zu haben:

wenn K%>75

zeichnen Linie o höchsten (Vergangenheit 36 Bars).

wenn Linie ON, zeichnen Sie keine weiteren Linien, bis die Linie gelöscht wird.

wenn ein Handel geöffnet ist, wird die Linie gelöscht

wenn kein Handel geöffnet ist und 24 Balken nach dem Balken, der K%>75 bestimmt hat, wird die Linie ebenfalls gelöscht

:)

Da dies mein erster Code ist, den ich in meinem ganzen Leben geschrieben habe, bitte ich Sie, mir zu zeigen, wie ich das Problem angehen soll.

danke

Wir beginnen am Anfang .....

double stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

Bei Takt 0 kann stoch irgendwo bei Takt 0 Wert > 75 und Ende mit niedrigerem Wert bekommen

Hat es eine Linie in diesem Fall zu zeichnen ?? oder ist es nur für enge Preis stochastische Enden ??

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];

Haben Sie jemals iHighest und/oder iLowest verwendet? Siehe, wie man iHighest und iLowest verwendet

if(stoch > 75) high_price = High[iHighest(NULL,0,MODE_HIGH,......

if(stoch < 25) low_price = Low[iLowest(........

//-----

for(high_nr=2;high_nr<36;high_nr++)   // why do you repeat this ??
{

   if(Bid<high_price && stoch>75)
     {
      ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato",OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+high_price);
     }
       
}

einmaliges Erzeugen ist genug .... die Schleife wiederholt nur das, was in { }

also wird keine Schleife für diese .... benötigt.

dann, bevor Sie erstellen

  • Überprüfung der laufenden Trades
  • Prüfen Sie, ob ein Objekt, dessen Name mit "Tomate" beginnt, bereits existiert, und wenn ja, dann prüfen Sie, ob Sie das alte Objekt löschen müssen

erstellen Sie einen Namen Moment machen Sie es wie

linenamehigh =     "tomato  "+ TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)

überprüfen Sie Ihre Objekte können mit

//----
   int i, ot=ObjectsTotal()-1;
   string id;
//----
   for(i=ot;i>=0;i--)
    {id=ObjectName(i);
     if(StringSubstr(id,0,7)=="tomato ")
      {
      //check when created 
      if(StringSubstr(id,8,...)< TimeToStr(Time[24],........)){ObjectDelete(id);}
      }  
     if(StringSubstr(id,0,6)=="olive ")
         {
         //.....
         }
    }

Klicken Sie auf die Links und versuchen Sie zu verstehen, was passiert

Stellen mit ....... innerhalb des Codes kannst du versuchen selbst auszufüllen

 
qjol:
Kannst du spezifizieren , was du versuchst, zu erreichen?


die endgültige Idee:

Signal 1 = wenn K%>75 und das Hoch von bar[1] und dem aktuellen bar[0] kleiner ist als das höchste Hoch der letzten 36 bar(High_point)

Tomatenlinie auf High_point zeichnen

wenn die Tomatenlinie bereits gezeichnet wurde, werden keine weiteren Linien gezeichnet, bis die Linie gelöscht wird.

wenn ein Handel mit der Tomatenlinie geöffnet ist, wird die Linie gelöscht

wenn kein Handel eröffnet ist und 96 Bars seit dem Bar, der den High_point bestimmt hat, vergangen sind , wirddie Linie gelöscht.

jetzt, ich bekomme nur eine Zeile auf jedem Signal 1(Print-Funktion sendet 36 "Tomate ON" jede gültige tick ich denke), so habe ich den Code zu sagen, um die Schleife zu stoppen, nachdem es die Tomate Linie findet. ich gehe kochen einige Spaghetti und denken, wie ich schreiben sollte, dass... in meinem Kopf sollte dies der nächste Schritt sein.... hoffe, ich bin nicht etwas verpassen :)

bin ich auf dem richtigen weg? vielen dank für eure hilfe und ratschläge.

den Code bis jetzt:

//+------------------------------------------------------------------+
//|                                                      1expert.mq4 |
//|                                                              ant |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "ant"
#property link      ""

#property indicator_chart_window

extern int Kperiod = 80;
extern int Dperiod = 30;
extern int Stochshift = 30;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double stoch;
stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

/////////////////////////////////////////////////////////////////////////////////
for(high_nr=2;high_nr<36;high_nr++)
{

   if(Bid<high_price && High[0]<high_price && High[1]<high_price && stoch>75)
     {
      ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[0],high_price);
      ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+H);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for(low_nr=2;low_nr<36;low_nr++)
{
if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25)
   {
   ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[0],low_price);
   ObjectSet("olive"+L,OBJPROP_COLOR,Olive);
   Print ("olive ON"+low_price);
   }
}   
   
   
//----
   
//----
   return(0);
  }
 

ich habe zur gleichen Zeit wie deVries gepostet.

ich gehe lesen :)

 
double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

if (stoch > 75 && High[1] < High[high_nr] && High[0] < High[high_nr])
   {
   ObjectCreate("tomato"+H,OBJ_TREND,0,Time[H],high_price,Time[0],High[0]);
   ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
   Print ("tomato ON"+H);   
   }

B.T.W. braucht dazu keine Leitung

 

Der Fall, über den du sprichst, cichichan wird selten vorkommen, so müssen Sie einen Index verwenden, damit Sie sehen können, was Sie tun:

http://charts.mql5.com/3/799/eurusd-h1-fxpro-financial-services.png

Der Pfeil_nach-unten wird nicht angezeigt, da gibt es irgendwo einen Fehler ....

//+------------------------------------------------------------------+
//|                                                      lexpert.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "ant"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 8
#property  indicator_color1 YellowGreen  
#property  indicator_color2 Coral


extern int Kperiod = 80;
extern int Dperiod = 30;
extern int Stochshift = 30;

 double arrow_up[];
 double arrow_down[];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   //-------- 
   SetIndexBuffer(0, arrow_up );
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID,2);
   SetIndexArrow(0,233);
   SetIndexEmptyValue(0,0.0);
//-------- 
   SetIndexBuffer(1,arrow_down);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID,2);
   SetIndexArrow(1,234 );
   SetIndexEmptyValue(1,0.0);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

   int    limit;
   int    counted_bars=IndicatorCounted();

   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   //---- macd counted in the 1-st additional buffer
   for(int i=limit; i>=0; i--)
      { 

double stoch_1, stoch_2;
stoch_2=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+2);
stoch_1=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+1);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,i+2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,i+2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

/////////////////////////////////////////////////////////////////////////////////


   if(Bid<high_price && High[i]<high_price && High[i+1]<high_price && stoch_2<75 && stoch_1 >75)
     {
     arrow_down[i] =  High[i] + 5*iATR(NULL,0,200,i);
      ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[i],high_price);
      ObjectSet("tomato"+H,OBJPROP_RAY_RIGHT, false);
      ObjectSet("tomato"+H,OBJPROP_WIDTH,5 ); 
      ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+H);
     }
    else    arrow_down[i] = 0.0;

///////////////////////////////////////////////////////////////////////////////

if(Bid>low_price && Low[i]>low_price && Low[i+1]>low_price &&  stoch_2>25 && stoch_1 < 25)
   {
   arrow_up[i] = Low[i] - 5*iATR(NULL,0,200,i);
   ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[i],low_price);
   ObjectSet("olive"+L,OBJPROP_COLOR, Yellow );
   ObjectSet("olive"+L,OBJPROP_WIDTH,5 );
   ObjectSet("olive"+L,OBJPROP_RAY_RIGHT, false);
   Print ("olive ON"+low_price);
   }
   else  arrow_up[i] = 0.0;
   
//----
  } 
//----
   return(0);
  }
 
für seine n Indikator n nicht n EA