[Archiv!] Einen Ratgeber kostenlos schreiben - Seite 11

 
skylord писал(а) >>

Hallo.

Ich habe gerade angefangen, MQL zu lernen, ich versuche, einen EA zu schreiben...

Ich versuche, einen EA zu schreiben, der auf dem sidus v.2 Indikator basiert. Ich möchte, dass er eine Position in der Richtung eröffnet, die ich im EA angegeben habe, nur wenn ein neuer Balken entsteht, d.h. beim ersten Tick sollte er prüfen, ob es ein Signal auf dem vorherigen Balken gibt und welche Art von Signal. Indikator-Datei anhängen.

Ich habe kein Glück beim Lesen dieses Signals((.

Helfen Sie mir, oder sagen Sie mir wenigstens, wie ich es machen soll ...

Ein Expert Advisor auf dem Sidus-Indikator

Vielleicht hilft Ihnen das oder die Suche weiter!

oder zweiten Wind!

 

Vielen Dank , vvavva. Ich habe eine gute Idee, aber sie überspringt und macht eine Menge linke Signale, aber es ist nicht das, was ich brauche (

Wie kann ich jemanden fragen, wie man den Status des Indikators Puffer auf dem vorherigen bar von der EA anfordern?

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}
else if (sigCurrent==2 && sigPrevious==1)
{
ExtMapBuffer3[i-1] = Low[i-1]-5*Point;
//ExtMapBuffer4[i] = Bid;
entry=true;
entry_point=Bid;

}
Ein EA benötigt eine passende Bedingung wie diese

double Up;
double Down;
int res;

Up=iCustom(NULL, 0, "sidus_v.2", 3, 1);
Down=iCustom(NULL,0, "sidus_v.2",2,1);
//---- Verkaufsbedingungen
if(Down==Low)
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
//---- Kaufbedingungen
if(Up==High)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,",MAGICMA,0,Blue);
return;
}

Aber das ist falsch!!!

Bitte beraten Sie mich, wie ich mit diesem Fall umgehen soll...

 

Hallo.

Ich bin ruhig Handel, ich bin mit 4 induks, Widerstand Unterstützung Linien, Trends, blah, blah, blah... Ich habe meine Augen auf dem Bildschirm gebrochen, können Sie mir helfen, fügen Sie das Tonsignal auf die Pfeile (Kauf, Verkauf) und die gleichen Pfeile in der Geschichte mit einer gepunkteten Linie (re-cut von der gleichen)

Dateien:
zigandzag.mq4  16 kb
 
skylord писал(а) >>

Hallo.

Ich habe gerade angefangen, MQL zu lernen, ich versuche, einen EA zu schreiben...

Ich versuche, einen EA zu schreiben, der auf dem sidus v.2 Indikator basiert, ich möchte, dass er eine Position in der Richtung öffnet, die ich durch den EA festgelegt habe, nur wenn ein neuer Balken geboren wird, d.h. beim ersten Tick sollte er prüfen, ob das Signal auf dem vorherigen Balken ist, und welche Art von Auftrag - mit einem Stop und einem Take. Indikator-Datei anhängen.

Ich habe kein Glück, dieses Signal zu finden((.

Helfen Sie mir, oder sagen Sie mir wenigstens, wie ich es machen soll ...

Hallo, gerade lief der Code mit meinen Augen, sorry ich bin ein schrecklicher lamer, ich könnte natürlich falsch sein, aber tut der Indikator overdraw? Versuchen wir einfach, logisch zu denken

for(int i=0; i<limit; i++)
   {

vom Null-Balken bis zu allen Balken in der Historie zählen, erhöhen Sie den Zähler.

ExtMapBuffer1[ i]=iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
     ExtMapBuffer2[ i]=iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
     rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);

Hier ist alles klar.

pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);

Scheiß auf den Macdak.

if ( pipdiffCurrent>0 && rsi_sig>50) 
     {
       sigCurrent = 1;  //Up
     }
     else if ( pipdiffCurrent<0 && rsi_sig<50)
     {
       sigCurrent = 2;  //Down

Wenn macdac größer als Null und RSI größer als 50 ist, ist das Sig 1, und wenn es kleiner ist, ist es 2

So weit, so gut.

if (sigCurrent==1 && sigPrevious==2)
     {

hier verstehe ich nicht... wenn sowohl macdak ist positiv und RSI ist größer als 50 und macdak ist negativ und RSI ist weniger als 50... da es eine Bedingung in dem folgenden Code gibt

sigPrevious=sigCurrent;

dann können wir sie gleichsetzen...

und die Zukunft zu stehlen ist eine schlechte Idee...

ExtMapBuffer3[i-1]

Nein, ersetzen wir sie durch diese, oder besser gesagt, überarbeiten wir sie komplett, da wir die Logik bereits kennen:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//----
extern int       FastEMA=14;
extern int       SlowEMA=21;
extern int       RSIPeriod=17;
//----
double BuyBuffer[], SellBuffer[];
int pre_signal = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
     
//----
      SetIndexBuffer(0, BuyBuffer);
      SetIndexLabel(0, "Buy");
      SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(0, 241);
//----
      SetIndexBuffer(1, SellBuffer);
      SetIndexLabel(1, "Sell");
      SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(1, 242);
//----
      return(0);
  }

int deinit()
  {
      
  }

int start()
  {
  

      int counted_bars = IndicatorCounted();

      
   int limit = Bars - 17;

   if( counted_bars > 17) 
     { 
       limit = Bars - counted_bars; 
     }

      for(int i = limit; i >= 0; i --)
        {
             BuyBuffer[ i] = EMPTY_VALUE;
             SellBuffer[ i] = EMPTY_VALUE;      
             
                
                 double a = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 double s = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 
                
                
                 double a1 = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double s1 = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double d1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i)-50;
             //----
           if( a< s && a1> s1 && d1>0)
               {
                    BuyBuffer[ i] = Low[ i] - iATR(NULL, 0, 14, i);
                    
               }
             if( a> s && a1< s1 && d1<0)
               {
                    SellBuffer[ i] = High[ i] + iATR(NULL, 0, 14, i);         
                    
               }
        
      
        }
      return(0);
  }

Es ist ein trauriges Bild, vergleichen Sie es:

Obwohl ich natürlich falsch liegen kann und der Indikator nicht neu gezeichnet wird, aber verzeihen Sie mir, und vielleicht können Sie den Eröffnungskurs verwenden (vor allem in RSI), aber nicht den Schlusskurs, so dass das Signal auf dem Balken erscheint, wo es sollte =(

 

Danke für Ihr Interesse vtoroe_dyxanie )))) Ich habe den Indikator nicht geschrieben, er wird nach meinen Beobachtungen nicht neu gezeichnet. Ich verwende ihn ab dem ersten Tick des nächsten Balkens, wenn er bereits fixiert ist. Deshalb muss ich wissen, was auf dem vorherigen Balken beim ersten Tick war. Und warum stiehlt sie die Zukunft? Ich habe den Eindruck, dass bei einem bestimmten Tick, wenn es eine solche Übereinstimmung gibt, sigCurrent ein Wert zugewiesen wird und am Ende der Variablen sigPrevious derselbe sigCurrent zugewiesen wird:

sigPrevious=sigCurrent;

und dann beim nächsten Tick, wenn sigCurrent bereits 2 ist und die Variable sigPrevious den Puffer natürlich mit 1 füllt:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

Und was dies betrifft:

ExtMapBuffer3[i-1]

Ich verstehe es selbst nicht ganz...

Aber es scheint gut zu funktionieren, Pfeile zeichnen auf den Balken, an dem das Signal erscheint!

Aber als ich -1 entfernte, tauchten eine Menge Überraschungen auf(



 
skylord >> :

Vielen Dank für Ihr Interesse vtoroe_dyxanie )))) Ich habe den Indikator nicht geschrieben, er wird nach meinen Beobachtungen nicht neu gezeichnet. Ich verwende ihn ab dem ersten Tick des nächsten Balkens, wenn er bereits gesperrt ist. Deshalb muss ich wissen, was auf dem vorherigen Balken beim ersten Tick war. Und warum stiehlt sie die Zukunft? Ich habe den Eindruck, dass bei einem bestimmten Tick, wenn es eine solche Übereinstimmung gibt, sigCurrent ein Wert zugewiesen wird und am Ende der Variablen sigPrevious derselbe sigCurrent zugewiesen wird:

sigPrevious=sigCurrent;

und dann beim nächsten Tick, wenn sigCurrent bereits 2 ist und die Variable sigPrevious den Puffer natürlich mit 1 füllt:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

Und was dies betrifft:

ExtMapBuffer3[i-1]

Ich verstehe es selbst nicht ganz...

Aber es scheint gut zu funktionieren, Pfeile zeichnen auf den Balken, an dem das Signal erscheint!

Aber als ich -1 entfernte, gab es viele Überraschungen(
.



Aber es hat noch eine weitere Nebenwirkung. Manchmal, wenn die Bedingungen erfüllt sind, gibt es ein Signal, aber es werden keine Pfeile gezeichnet. Aber wenn ich sie wieder in ein Diagramm einfüge, kehren alle Pfeile an ihren Platz zurück. Gibt es eine Möglichkeit, die Kompilierung auf einem Diagramm erneut durchzuführen oder die Puffer erneut zu aktualisieren?

 
skylord писал(а) >>

Warum stiehlt sie die Zukunft? Er scheint sigCurrent bei einem bestimmten Tick einen Wert zuzuweisen, wenn es eine solche Übereinstimmung gibt, und er weist denselben sigCurrent am Ende der sigPrevious-Variablen zu:

sigPrevious=sigCurrent;

und dann beim nächsten Tick, wenn sigCurrent bereits 2 ist und die Variable sigPrevious den Puffer natürlich mit 1 füllt:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}



Dein wahres, unaufmerksames Ich...

Über: "Ich verwende ihn ab dem ersten Tick des nächsten Balkens, wenn er bereits festgelegt ist. Deshalb muss ich beim ersten Tick wissen, was auf dem vorherigen Balken war. "Und ich frage mich wirklich, ob Sie nicht

double iCustom( .... int shift)

die allwissende Hilfe sagt, dass

Schicht - Index des aus dem Indikatorpuffer erhaltenen Wertes (Verschiebung relativ zum aktuellen Takt um die angegebene Anzahl von Perioden zurück).

Ich frage mich, ob man das so schreiben kann (ich habe mich das auch gefragt)

for (i=0; i<limit;i++){

if (iCustom(NULL, 0, "sidus_v.2", 3, i+1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, i)>0)

....

weil ooooopsie Wise Forum Benutzer wird kaum herablassend zu zwei Nubis, links, um meine Fähigkeiten auf ihre eigenen zu verbessern, denn es könnte nützlich sein.

 
vtoroe_dyxanie писал(а) >>

Stimmt, ich bin unaufmerksam...

Über: "Ich verwende ihn ab dem ersten Tick des nächsten Balkens, wenn dieser bereits gesperrt ist. Deshalb muss ich beim ersten Tick wissen, was auf dem vorherigen Balken war. "Und ich frage mich wirklich, ob wir nicht

double iCustom( .... int shift)

Die allwissende Referenz sagt, dass

Schicht - Index des aus dem Indikatorpuffer gewonnenen Wertes (Verschiebung relativ zum aktuellen Takt um die angegebene Anzahl von Perioden zurück).

Ich frage mich, ob man das so schreiben kann (ich habe mich das auch gefragt)

for (i=0; i<limit;i++){

if (iCustom(NULL, 0, "sidus_v.2", 3, 1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, 0)>0)

....

als oooooovery Wise Forumsteilnehmer sind unwahrscheinlich, zu den beiden nubis herablassend, links, um ihre Fähigkeiten auf eigene Faust zu verbessern, denn es könnte nützlich sein.

Nein, kann nicht =(

Mist, wie kann man dieses Problem dann lösen? Nun, da Sie es bereits angesprochen haben: https://www.mql5.com/ru/forum/117268 wir werden es im Auge behalten =)

 
vtoroe_dyxanie писал(а) >>

Das geht nicht =(

Mensch, wie löst man dann diese Frage? Nun, da Sie bereits einen Thread gestartet haben: 'Wie man die Richtung von einem EA herausfindet', werden wir ihn im Auge behalten =)

>> Ich werde für das Unternehmen eine Spurensuche durchführen!?)

 
vtoroe_dyxanie писал(а) >>

Das geht nicht =(

Mensch, wie löst man dann diese Frage? Nun, da Sie bereits einen Thread gestartet haben: "Wie man die Richtung von einem EA kennen", werden wir ein Auge darauf werfen =)

>> Hey! Erinnern Sie sich, dass ich Sie um Hilfe gebeten habe? wenn es nicht zu schwer ist, können Sie mir mehr sagen? was Sie für mich getan haben, ist das, was ich jetzt geschrieben habe (ich wollte, dass der Indikator die engsten Zeitrahmen in einem Fenster anzeigt), das ist was????

Dateien:
test1.mq4  6 kb