Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 747

 
TarasBY:

2) Es können nicht gleichzeitig UPPER- und LOWER-Fraktale auf demselben Balken sein, bzw. überprüfen Sie

gehört in die Kategorie der Idiotie der Programmierer.

Diese Zitate sind also nur für Idioten.


 
TarasBY:

2) Es können nicht gleichzeitig UPPER- und LOWER-Fraktale auf demselben Balken sein, bzw. überprüfen Sie

gehört in die Kategorie der Programmierer-Idiotie.


Beide Fraktale können sich auf demselben Balken befinden
 
Vinin:
Beide Fraktale können sich auf demselben Balken befinden
er meinte Minuten, vergaß aber die Monate
 
Hallo

Im Code gibt es folgende Zeile

 if (G_time_344 == Time[0]) return (0);
Soweit ich verstanden habe, ist sie dafür verantwortlich, dass der EA die Neuberechnung verzögert, bis ein neuer Balken erscheint. Die Neuberechnung wird angehalten, bis sich die Öffnungszeit des Nullbalkens ändert.

Wenn ich also einen EA auf Minutenbasis öffne, wird er mit jeder neuen Minute neu berechnet. Und wenn ich ihn auf H4 öffne, wird er alle 4 Stunden neu berechnet.

Wie schreibe ich diese Zeile richtig, so dass der EA nicht die Eröffnungszeit der aktuellen Bar, dh die Bar, bei der das Terminal geöffnet ist, aber die eine, die ich in den Einstellungen angeben wird? Das heißt, ich platziere den EA z.B. auf H4, und er wird alle 5 Minuten neu berechnet, weil ich es so eingestellt habe. Oder jede Minute.


 
_new-rena:
er meinte Minuten, vergaß aber die Monate

Was ist der Unterschied zwischen Minuten und Monaten?


 
evillive:
Worüber wird im Änderungsprotokoll geklagt? "Stupidly opens new pending orders", weil es kein Limit gibt, aber einen OrderSend.
Keine Fehler, nur gelbe Dreiecke.
 
AlexeyVik:

Was ist der Unterschied zwischen Minuten und Monaten?

Ich stimme zu, es gibt auch schöne Momente auf der M1. aber in den Monaten ist jeder Takt so.
 
Keine weiteren Fragen, ich habe es selbst herausgefunden.
 
TarasBY:

1) Jede Strategie muss durch die Anzahl der gleichzeitig offenen Aufträge definiert sein. Dementsprechend sollten wir vor der Eröffnung der nächsten Bestellung prüfen, wie viele Bestellungen bereits offen sind.

2) Auf einem Balken können nicht gleichzeitig UPPER- und LOWER-Fraktale vorhanden sein, bzw. die Prüfung wird als

gehört in die Kategorie der Idiotie der Programmierer.

3) Bevor Sie die Bedingungen für die Rückgabe von Pufferindikatorwerten schreiben, müssen Sie genau wissen, welcher Wert für ihn "leer" ist. Haben Sie überprüft, ob sie 0 ist?

4) Das Konstrukt.

Das funktioniert zwar (in den meisten Fällen), ist aber unnatürlich, weil es eine "freie" Idee des Entwicklers ist, und für den Händler uninformativ. Eine Alternative - die Verfolgung eines neuen Balkens.

5) Man muss mit den Grundlagen beginnen, denn das:

Das deutet darauf hin, dass Sie überhaupt nicht verstehen, was Sie da schreiben.

Der beste Weg, dies zu verstehen, besteht darin, zu studieren, wie die Codes anderer Leute funktionieren, und sie für die eigenen Zwecke zu modifizieren. Viel Glück!

Er zeigt sie so an, wie sie geschrieben sind, Punkt für Punkt. Er ändert sie nicht, worüber Sie kein Wort verloren haben. Hier ist der vollständige Code:
//+------------------------------------------------------------------+
//|                                                   Strategy 3.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""
#include <Library1.mqh>
extern int Magic=111;
extern int TP=20;
extern int SL=30;
extern int Trall_dist=10;
extern int Shag=10;
extern bool Isp_shag=false;
extern bool Isp_bezubitok=false;
extern double Lot=0.1;
double SS=0,BS=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double tp,sl;
  if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);       //верхний фрактал,формируется на третьей свече
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);     //нижний фрактал,формируется на третьей свече                                                   
//----
  if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        {
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        }
     
       }   
   else if(Up==0&&Down>0&&Volume[0]<2)
    {
    if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
    else {SS=Low[3]-5*Point; Print("Виртуальный SS:",SS);}
         {
         for (pos=1;pos==OrdersTotal();pos++)
             {
             OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
             if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
               {
               OrderModify(OrderTicket(),Down-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
               } 
             }
         }
    
            
    if(OrdersTotal()>0)
    Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
    return(0);
  }}
//+------------------------------------------------------------------+
Ich versuche zu schreiben, was ich gelesen, gesehen und verstanden habe. Ihre Kritik erinnert mich an ein MQL4-Handbuch - ich verstehe es nur, wenn es mir jemand erklärt.
 
if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        { // К чему относится эта скобка???
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
       } // это пара к той...
      }
     


Und dieser Code

if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака

es ist besser, in init() zu schreiben, und zwar nicht so

double   point; // на уровне глобальных переменных

int OnInit()
{
   point = Digits%2 == 0 ? _Point : _Point * 10;
}

und dann in start()

tp = High[3]+TP*point;