[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 797

 

Liebe Kameradinnen und Kameraden! Dies ist mein Versuch #2, ein Wunderwerkzeug zu schaffen, das ROC AUDUSD und GBPUSD liest, um auf GBPAUD zu handeln). Es ist ein bisschen primitiv, aber ich wollte es unbedingt ausprobieren!!! Wenn ich es im Tester ohne Optimierung ausführe, friert es ein, lädt aber erfolgreich weiter... und am Ende - kein einziger Handel. Offensichtlich habe ich es vermasselt, aber wo, bitte, sagt es mir, ihr Wissenden!!! :)) Dies ist ein EA-Code, der Daten aus einem normalen benutzerdefinierten ROC übernimmt.

//+------------------------------------------------------------------+
//|                                                    Robot_Rocky_Rich |
//|                                                          JonsonAlla |
//|                                                    deep_ampik@bk.ru |
//+------------------------------------------------------------------+

extern double TakeProfit = 700;
extern double Sl = 200;
extern double Lots = 0.01;
             
//+------------------------------------------------------------------+
int start()
 {
  int cnt, ticket;
  double x1= iCustom("AUDUSD",PERIOD_H1,"ROC",12,1,0);
  double x2= iCustom("GBPUSD",PERIOD_H1,"ROC",12,1,0); 
  
  
     
  /**total=OrdersTotal();
  if(total<1)//проверка количества ордеров 
   {
   if(AccountFreeMargin()<(1000*Lots))
    {
     Print("Недостаточно средств = ", AccountFreeMargin());
     return(0);  
    }**/
  if (x1<x2)
   {
    ticket=OrderSend("GBPAUD",OP_BUY,Lots,Ask,30,Bid-Sl*Point,Ask+TakeProfit*Point,"-",0,0,Green);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии BUY позиции : ",GetLastError());          
    return(0);
   }
  if (x1>x2) 
   {
    ticket=OrderSend("GBPAUD",OP_SELL,Lots,Bid,30,Ask+Sl*Point,Bid-TakeProfit*Point,"-",0,0,Red);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция SELL : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии SELL позиции : ",GetLastError());
    return(0); 
   }
   return(0);
  }
  
 
Vinin:

IndicatorCounted() funktioniert nicht in EAs. Sie ist nur für Indikatoren bestimmt. Vielleicht sollten wir das Problem ein wenig ausweiten. Es gibt verschiedene Möglichkeiten, das Problem zu lösen. Am einfachsten ist es, den Indikator zu optimieren (was aber nicht immer möglich ist), Sie können die Berechnungen auf den Expert Advisor übertragen, was aber auch nicht immer möglich ist. Sie müssen sich den Indikator tatsächlich ansehen

Ich möchte den Berechnungscode in einen EA übertragen, in einem Indikator beginnt der Berechnungscode mit einer Schleife...wie kann ich ihn durch einen korrekteren ersetzen7

int CountedBars=IndicatorCounted();
if(CountedBars< 0) CountedBars= 0;
if(CountedBars> 0) CountedBars--;
cnt = Bars - CountedBars;

for(int i = 0; i < cnt ;i++)
 
obla4ko:

Liebe Kameradinnen und Kameraden! Dies ist mein Versuch #2, ein Wunderwerkzeug zu schaffen, das ROC AUDUSD und GBPUSD liest, um auf GBPAUD zu handeln). Es ist ein bisschen primitiv, aber ich wollte es unbedingt ausprobieren!!! Wenn ich es im Tester ohne Optimierung ausführe, friert es ein, wird aber weiterhin erfolgreich geladen... und am Ende - kein einziger Handel. Offensichtlich habe ich es vermasselt, aber wo, bitte, sagt es mir, ihr Wissenden!!! :)) Dies ist der Code des so genannten Expert Advisors, der Daten aus dem üblichen Custom ROC übernimmt.


Versuchen Sie es mit einer primitiven Verlaufskontrolle

Dateien:
 
Vinin:


Versuchen Sie es mit einer primitiven Kontrolle des Ladens der Geschichte

Vielleicht ist es nicht korrekt, nur x1 und x2 zu vergleichen, sondern sollte an etwas angehängt werden, z.B. an den letzten Balken? Nach der Logik des Indikators sollte EA mindestens eine Position öffnen und nicht schließen, da das Schließen im Programm nicht implementiert ist :)), und der ROC einer Währung ist immer größer als der ROC der anderen ...

 

Vielleicht ist der Aufruf des Indikators nicht ganz richtig. Ich werde selbst danach suchen müssen. Es scheint nur so, dass der Puffer Null sein sollte, nicht der erste.

 

Ich habe keinen solchen Indikator

 
T-G:

Ich möchte den Berechnungscode in den Expert Advisor übertragen, der Berechnungscode im Indikator beginnt mit einer Schleife...wie kann ich ihn durch einen korrekteren ersetzen7

1. Warum?????????????????????

Aber wenn Sie es wirklich brauchen, dann

2. Warum zum Teufel antworte ich auf nichts? Ich habe es Ihnen gesagt - es gibt einen Artikel von Kositsyn darüber in den Artikeln (er ist hier, Link oben). Wie oft muss ich es Ihnen noch sagen? Vielleicht haben Sie etwas anderes zu tun?

 
Vinin:

Ich habe keinen solchen Indikator

Hier ist der Code für den ROC-Indikator

//+------------------------------------------------------------------+
//|                                                          ROC.mq4 |
//|                                    Copyright © 2006, Robert Hill |
//+------------------------------------------------------------------+

#property  copyright "Copyright © 2006, Robert Hill"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Red
//---- indicator parameters
extern int RPeriod = 12;
extern bool UsePercent = true;
//---- indicator buffers
double RateOfChange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0, DRAW_LINE);
   SetIndexDrawBegin(0, RPeriod);
   IndicatorDigits(Digits + 1);
//---- indicator buffers mapping
   if(!SetIndexBuffer(0, RateOfChange))
       Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("ROC(" + RPeriod + ")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double ROC, CurrentClose, PrevClose;
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if(counted_bars < 0) 
       return(-1);
//---- last counted bar will be recounted
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars - RPeriod;
//---- ROC calculation
   for(int i = 0; i < limit; i++)
     {
       CurrentClose = iClose(NULL, 0, i);
       PrevClose = iClose(NULL, 0, i + RPeriod);
       ROC = CurrentClose - PrevClose;
       //----
       if(UsePercent)
         {
           if(PrevClose != 0)
               RateOfChange[i] = 100 * ROC / PrevClose;
         }
       else
           RateOfChange[i] = ROC;
     }   
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
 

"Muss denn niemand den Boden wischen? Ich komme und wasche sie! " (с)

Hier ist die Übertragung des Indikatorcodes in den Expertencode.

 
obla4ko:

Hier ist der Code für den ROC-Indikator


Es liegt ein Fehler im Indikatorcode vor.