[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 537

 
Equilibrium:
Guten Tag, bitte helfen Sie mir, ich kann nicht debuggen meine Expert Advisor (Öffnen und Schließen von Aufträgen nicht durch Kriterium arbeiten, wie erwartet (durch Kreuzung Stochastik jedes Mal), öffnen Sie auf Stochastik sehr selten und ich kann nicht verstehen, warum ((((), hier ist ein Screenshot und das Programm:

Keine stochastische Schnittmenge gefunden (ich meine Code)
 

Hallo zusammen.

Helfen Sie mir, den Code richtig zu schreiben.

 if(Bid > Line_2 && Rsi < 30)     //Если цена больше максимальной(верхней) линии..
                                  //..и RSI меньше заданного условия..
      {
       Opn_B= true;               //..тогда получаем условие на открытие  Buy
      }

Wenn die erste Bedingung Bid > Line_2 erfüllt ist, geht die zweite Bedingung RSI<30 verloren, d.h. die RSI-Indikatorlinie steigt über den Wert 30.

Wie verknüpft man zwei Bedingungen richtig?

Wenn jemand eine solche Implementierung gesehen hat, bitte ich um einen Link.

 
Pacman:

Hallo zusammen.

Helfen Sie mir, den Code richtig zu schreiben.

Wenn die erste Bedingung Bid > Line_2 erfüllt ist, geht die zweite Bedingung RSI<30 verloren, d.h. die RSI-Indikatorlinie steigt über den Wert 30.

Wie verknüpft man zwei Bedingungen richtig?

Wenn jemand eine solche Implementierung gesehen hat, bitte ich um einen Link.

Der einfachste und effektivste Weg ist, in CodaBase nach dem Wort "RSI" in bereits implementierten EAs zu suchen.
 
Ich möchte meine Frage wiederholen: Ich habe einen Indikator (den oberen Indikator auf dem Bild), der NUR diese Signale gibt.
Ich muss diese Signale in ein "solides" Signal umwandeln (unterer Indikator in der Abbildung).
Helfen Sie, wenn Sie wissen, wie es geht!

P.S.

Der MACD-Indikator in der Abbildung wird nur zur Veranschaulichung meines Problems verwendet.



Ich habe eine Antwort von TaraasBY (wofür ich mich herzlich bedanke):

Sie füllen den Indikatorpuffer mit dem vorherigen (nicht leeren) Wert, falls dieser nicht vorhanden ist:

if (gda_BUF1[pos] == EMPTY_VALUE) 
    {
        if (gda_BUF1[pos+1] != EMPTY_VALUE) gda_BUF1[pos] = gda_BUF1[pos+1];
       
    }


Wie kann ich ExtMapBuffer1[i] und ExtMapBuffer1[pos] miteinander verknüpfen?

Ich möchte den Indikator nur für den MACD wiederholen. Wie kann ich die oben genannte Konstruktion wiederholen?

#property indicator_separate_window
#property indicator_minimum -1.5
#property indicator_maximum 1.5
#property indicator_buffers 1
#property indicator_color1 Aqua
#property  indicator_width1  2
#property indicator_level1 0.0
//--- buffers
double ExtMapBuffer1[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
   
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=1;
       }
      else
       {
        
       
       
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=-1;
       }
      else
       {
        ExtMapBuffer1[i]=0;
       }
      }
      
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Wie verbinde ich ExtMapBuffer1[i] und ExtMapBuffer1[pos]?

Hier ist der Code des Indikators. Ich möchte wiederholen, dass der MACD-Indikator nur ein Beispiel ist, wie kann ich die oben erwähnte Struktur in ihm wiederholen?

Etwa so (auf den MACD angewandt):

int start()
  {
     int counted_bars=IndicatorCounted(),
       limit;  
     static int li_preSignal = 0;
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
   
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=1;
        li_preSignal = 1;
       }
      else
       {
        
       
       
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=-1;
        li_preSignal = -1;
       }
      else {ExtMapBuffer1[i] = li_preSignal;}
      }
      
 
//----
   return(0);
  }
 
TarasBY:
Der einfachste und effektivste Weg ist, in CodaBase nach dem Wort "RSI" in bereits implementierten EAs zu suchen.

Danke, ich werde weiter suchen.
 
TarasBY:

Also (bezogen auf den MACD):

Danke, es funktioniert, aber nur einen Takt später! Können Sie sonst noch etwas tun?

 
TarasBY:

Also (bezogen auf den MACD):

Ihre frühere Version mit ExtMapBuffer1[pos] macht für mich mehr Sinn und scheint universeller zu sein.
 
MK07:

Danke, es funktioniert, aber nur einen Takt später! Können Sie sonst noch etwas tun?

Versuchen Sie dies.

Dateien:
 

Vinin
:


Keine stochastische Schnittmenge gefunden (ich meine Code)

// Обращение к функции техн.индикат.
   
   M_1=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_MAIN,  1);
   M_2=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_MAIN,  2);
   S_1=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_SIGNAL,1);
   S_2=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_SIGNAL,2);

                        // Анализ ситуации
   
   if (M_2 < S_2 && M_1==S_1)                    // Условие откр. Buy и закр. Sell 
     {
      if (Total>0)
        {
        Close_Order_S(Ticket,Ans,Lts); 
        }
      
        Ticket = Open_Order_B(StopLoss,Lts); 
                                                                         
     } 
   if (M_2 > S_2 && M_1==S_1)                    // Условие откр. Sell и закр. Buy        
     {  
      if (Total>0)
        {
        Close_Order_B(Ticket,Ans,Lts);   
        }                           
      
        Ticket = Open_Order_S(StopLoss,Lts); 
Grund der Beschwerde: