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

 
Neo777:

Hier ist ein EA, der die Order beim SCHLIESSEN der Kerze öffnet, nicht nur bei einem Kreuz.

Ich möchte gerne wissen, wie ich die Bestellung öffnen kann.


Und woher wollen Sie wissen, dass der Balken mit diesem Tick schließt? Vielleicht durch die Eröffnung einer neuen Bar?

Der Code wird über die Schaltfläche SRC eingefügt

 

GUT.

Ja, die neue Bar.

 
Neo777:

GUT.

Ja, die neue Bar.

https://www.mql5.com/ru/articles/1494 sind Möglichkeiten, um festzustellen, dass ein neuer Takt begonnen hat. Wie es angefangen hat - prüfen Sie Ihre Bedingungen
 

Guten Tag Leute, kann mir bitte jemand bei der WindowScreenShot-Funktion helfen? Seit dem 3. Tag antwortet niemand mehr((. Ich habe das folgende Skript geschrieben (siehe beigefügte Datei).

In 2 Worten über das Drehbuch. Das Skript ist für die Erstellung von Screenshots des aktuellen Charts des Client-Terminalfensters gedacht. In der externen Variable extern datetime Time_bar wird die Zeit des Balkens angegeben, ab der und bis zum Null-Balken erstellt wird (unter Berücksichtigung des rechten Einzugs im Chart). In der Zeile

int bar_number=iBarShift(NULL,0,Time_bar,true)

wird die Seriennummer des Balkens gesucht, die wir in der externen Variablen extern datetime time_bar angegeben haben. Die Funktion selbst, in der Zeile

bool f=WindowScreenShot(name+".gif",1024,768,bar_number,Scale,View_graph)

Die Frage ist nun... Nehmen wir der Einfachheit halber an, dass wir einen Screenshot der letzten beiden Balken erstellen müssen. Dann, wenn die Zeile

int bar_number=iBarShift(NULL,0,Time_bar,true)

unverändert gelassen wird, ergibt sich folgender Screenshot


Das heißt, auf dem Screenshot ist kein Balken zu sehen (obwohl die Zeichenfolge

int bar_number=iBarShift(NULL,0,bar_time,true)

die Balkenanzahl nach Zeit sollte berechnet werden)

Wenn diese Zeile wie folgt dargestellt wird

int bar_number=iBarShift(NULL,0,Time_bar,true)+2

erhalten Sie den gewünschten Screenshot:

Frage: Warum hat diese Zeichenfolge die folgende Form

int bar_number=iBarShift(NULL,0,Time_bar,true)

das Bildschirmfoto mit einer Verschiebung von 2 Balken nach rechts von dem in der obigen Zeile angegebenen Wert aufgenommen wurde?

P.S. Um das Forum nicht zu überladen, danke im Voraus für die Antwort

Dateien:
 
ilunga:
Code anzeigen + welche Eingabeparameter im Indikator sind

Ich habe es 20 Mal überprüft, ich würde nicht schreiben, ohne es 20 Mal überprüft zu haben, alle Parameter sind korrekt wie im Indikator. Vielleicht liegt das Problem woanders, vielleicht sind Sie schon einmal auf ein solches Problem gestoßen?
 

Kolleginnen und Kollegen!!! Guten Abend!

Ich habe einen erstaunlichen QQE-Indikator entdeckt und beschlossen, einen Expert Advisor zu finden, der auf diesem Indikator basiert.... und konnte ihn nicht finden. Aber in diesem Forum fand ich eine Nachricht von Benutzer POZITIV.

Er schrieb die folgende Logik: "Wenn die rote Linie die gelbe Linie nach oben kreuzt, sollte ein Kaufauftrag eröffnet werden, wenn die rote Linie die gelbe Linie nach oben kreuzt - ein Verkaufsauftrag".

Das Ergebnis war ein halbfertiger Code für den Expert Advisor.

Ich habe eine andere Logik errechnet: Wenn die fette Kurve die gestrichelte Linie von oben nach unten kreuzt, muss man verkaufen und das Los schließen (kaufen), wenn die fette rote Kurve die gestrichelte Linie von unten nach oben kreuzt. Und im gleichen Moment zu öffnen sofort ein anderes Los (kaufen), die schließen sollte (verkaufen), wenn die umgekehrte Situation passiert.....-so ständig ein Los zu öffnen, und jede Kreuzung der Linien wird verwendet, um eine zu schließen und gleichzeitig öffnen ein anderes Los. Und der Schnittpunkt sollte wahrscheinlich durch ihre Werte nach dem Schließen einer Bar betrachtet werden, dh wenn die 20 Minuten (nach dem Schließen), fett hatte einen Wert von 51 (bedingt), und die gepunktete 50, und 21 Minuten (nach dem Schließen), fett 50 und die gepunktete 51, dann haben Sie zu verkaufen. Keine SL oder TP.

Im Prinzip ist die Logik einfach. Keine Pfeile, keine Alarme und Meldungen. Handeln Sie nur im automatischen Modus in seiner reinen Form.

Bitte helfen Sie mir, diesen Code (unten) auf diese Logik zu verfeinern. Und es wäre möglich, den Zeitraum (von 1 Minute bis 1 Tag) und den SF-Parameter (Glättung) anzupassen.

Seit zwei Tagen versuche ich, den Code zu verstehen und ihn zu korrigieren, aber ich bin kein Programmierer(((((((((((


Ich hoffe wirklich auf Ihre Hilfe!

//--- input parameters
extern double MaxRisk=1.0;
extern double FixLot = 0.01;
extern double Exponent=2.0;
extern int Magic=888;

// костыли

extern int TakeProfit=100;
extern int StopLoss=100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
//----
   int Count=0;
   double b0,b1;
   int ticket;

// параметры индикатора
   int SF=5; // original 5
   int RSI_Period=14; // original 14
   double DARFACTOR=4.236; //original 4.236

//------------ Параметры из индикатора QQEA -----------------------
// Buffer0 -- красная жирная
   string Buffer0=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,0,0);
// Buffer1 -- жёлтый пунктир
   string Buffer1=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,1,0);

   b0=StrToDouble(Buffer0);
   b1=StrToDouble(Buffer1);


   double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибке
   if(Lot==0)
     {
      Alert("Недостаточно средств!");
      return(0);
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Lot!=0 && b0>b1) // если лот <> 0 и красная выше жёлтой
     {
      ticket=NewOrder(OP_BUY,Lot);
      if(ExistOrders(Symbol(),1,888,0)==true) // проверяем наличие ордера sell
        {
         CloseOrder();
        }
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Lot!=0 && b0<b1) // если лот <> 0 и красная выше жёлтой
     {
      ticket=NewOrder(OP_SELL,Lot);
      if(ExistOrders(Symbol(),0,888,0)==true) // проверяем наличие ордера buy
        {
         CloseOrder();
        }
     }

   Comment("Red line: ",b0,"Yellow line: ",b1);
   return(0);
  }
//-------------------------------------------------------------
//расчёт лота

double GetLot(int Risk)
  {
   double Free=AccountFreeMargin();
   double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
   double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
   double Step=MarketInfo(Symbol(),MODE_LOTSTEP);
   double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
   if(Lot<Min_Lot) Lot=Min_Lot;
   if(Lot>Max_Lot) Lot=Max_Lot;
   if(Lot*One_Lot>Free) return(0.0);
   return(Lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ExistOrders(string sy="",int op=-1,int Magic=-1,datetime ot=0)
  {
   int i,k=OrdersTotal(),ty;

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ty=OrderType();
         if(ty>1 && ty<6)
           {
            if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))
              {
               if(Magic<0 || OrderMagicNumber()==Magic)
                 {
                  if(ot<=OrderOpenTime()) return(True);
                 }
              }
           }
        }
     }
   return(False);
  }
//открытие нового ордера
int NewOrder(int Cmd,double Lot)
  {
   double TP=0; //тейкпрофит
   double SL=0; //стоплосс
   double PR=0; //Цена
   while(!IsTradeAllowed()) Sleep(100);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Cmd==OP_BUY)
     {
      PR=Ask;
      if(TakeProfit>0) TP=Ask+TakeProfit*Point;
      if(StopLoss>0) SL=Ask-StopLoss*Point;
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Cmd==OP_SELL)
     {
      PR=Bid;
      if(TakeProfit>0) TP=Bid-TakeProfit*Point;
      if(StopLoss>0) SL=Bid+StopLoss*Point;
     }
   if(GetOrdersCount(Magic,Cmd)>0)return(0);
   int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP," ",0,0,Green);
   if(tic<0) Print("Ошибка открытия ордера: ",GetLastError());
   return(tic);
  }
// закрытие ордера
void CloseOrder()
  {
   double PR=0;
   while(!IsTradeAllowed()) Sleep(100);
   if(OrderType()==OP_BUY) PR=Bid;
   if(OrderType()==OP_SELL) PR=Ask;
   if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
      Print("Ошибка закрытия ордера: ",GetLastError());
   return;
  }
//+------------------------------------------------------------------+
// подсчет кол-ва открытых позиций
int GetOrdersCount(int MagicNumber,int Type)
  {
   int count=0;

   for(int i=0; i<OrdersTotal(); i++)
     {
      // already closed
      if(OrderSelect(i,SELECT_BY_POS)==false) continue;
      // not current symbol
      if(OrderSymbol()!=Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber()!=MagicNumber) continue;

      if(OrderType()==Type)
        {
         count++;
        }
     }

   return(count);
  }
//-------------------------------------------------------
 
sss2019:

Nun, ich habe alles 20 Mal selbst überprüft, ohne 20 Mal zu überprüfen, würde ich nicht schreiben, alle Parameter sind korrekt wie im Indikator. Das Problem liegt wahrscheinlich woanders, vielleicht ist jemand auf ein solches Problem gestoßen?
Nichts als falsche Parameter in iCustom eingegeben und kann nicht sein. Suchen Sie danach.
Ich habe einen Abend lang versucht, das Problem selbst zu lösen. Ich habe beim Übertragen des Externs von einem Indikator in einen EA die Parameterreihenfolge verwechselt. Ich war fast verrückt, die Reihenfolge der Parameter war die gleiche :))
 
granit77:
Nichts als eine falsche Parametereingabe in iCustom und das kann nicht sein. Schlagen Sie es nach.
Ich selbst habe neulich einen Abend lang mit ihr gekämpft. Ich habe bei der Übertragung der externen Parameter vom Indikator zum Expert Advisor die Reihenfolge der Parameter verwechselt. Ich war fast verrückt, die Reihenfolge der Parameter war die gleiche :))

iCustom(Symbol(),0,"RMRCS_entry-point"," ",5,6,7,62,-62,57,-57,54,-54,0.7,1.1,1.07," ",1,9,6,1,34,6,0,4,89,1,3,3.0,2.0,0.5,3.0," ",6,6,70,30,0.0,6,3.0," ",1,21,1,45,89,1,35,89,1,9," ",4,2,5,1," ",49,-49,0,0,0,0,0,0,0,0," ",0,34,200,150,1,100," ",1,3,1,1,2," ",1.4,3.7,0,1);


Und hier sind die Parameter

extern string REI_str = "";
extern int REI1_Per=5; 
extern int REI2_Per=6;     
extern int REI3_Per=7;     
extern int REI1_up=62;    
extern int REI1_dn=-62;    
extern int REI2_up=57;     
extern int REI2_dn=-57;            
extern int REI3_up=54;     
extern int REI3_dn=-54;            
extern double REI1_ct=0.7;  
extern double REI2_ct=1.1;  
extern double REI3_ct=1.07;
extern string MACD_str = "";
extern int MACD_FastMA_Meth=1;   
extern int MACD_FastMA_Per=9;    
extern int MACD_FastMA_Price=6; 
extern int MACD_SlowMA_Meth=1;   
extern int MACD_SlowMA_Per=34; 
extern int MACD_SlowMA_Price=6; 
extern int MACD_SL_Meth=0;      
extern int MACD_SL_Per=4;       
extern int MACD_Diap_Per=89;    
extern int MACD_Slope_Meth=1;   
extern int MACD_Slope_Per=3;  
extern double MACD_ct_1 = 3.0; 
extern double MACD_ct_2 = 2.0;  
extern double MACD_ct_3 = 0.5;  
extern double MACD_ct_4 = 3.0;  
extern string RSI_str = "";
extern int RSI_Per = 6;     
extern int RSI_Price = 6;  
extern int RSI_up = 70;      
extern int RSI_dn = 30;     
extern double RSI_ct1 = 0.0; 
extern int RSI_ct2 = 6;      
extern double RSI_ct3 = 3.0;
extern string CHO_str = "";
extern int  CHO_FastMA_Meth=1;      
extern int  CHO_FastMA_Per=21;      
extern int  CHO_SlowMA_Meth=1;      
extern int  CHO_SlowMA_Per=45;      
extern int  CHO_DiapVal_Per=89;     
extern int  CHO_MADiapVal_Meth=1;   
extern int  CHO_MADiapVal_Per=35;    
extern int  CHO_SlopeDiapVal_Per=89;  
extern int  CHO_MASlope_Meth=1;      
extern int  CHO_MASlope_Per=9;       
extern string Stoch_str = "";
extern int Stoch_KPer=4;       
extern int Stoch_DPer=2;        
extern int Stoch_Slow=5;        
extern int Stoch_SL_MA_Meth=1; 
extern string EntryLevel_str = "";
extern int REI_SvS_up = 49;  
extern int REI_SvS_dn = -49; 
extern int MACD_SvS_up = 0; 
extern int MACD_SvS_dn = 0;  
extern int RSI_SvS_up = 0;  
extern int RSI_SvS_dn = 0; 
extern int CHO_SvS_up = 0;  
extern int CHO_SvS_dn = 0;  
extern int STO_SvS_up = 0; 
extern int STO_SvS_dn = 0;  
extern string EntryOther_str = "";
extern int MALgthBar_Meth=0;
extern int MALgthBar_Per=34;
extern int MAXLgthBar = 200;
extern int TtS_MinABS = 150; 
extern int Shift_Points = 1; 
extern int Start_Calc = 100;   
extern string EntryCondition = "";
extern bool Ban_InvEntry = true;    
extern int InvEntry_Bars = 3;        
extern bool Ban_TtS_Decline=true;   
extern bool Ban_Entry_Series = true; 
extern int MAX_Entry_Series=2;      
extern string Gen_str = ""; 
extern double DiapBar_CtSl = 1.4;
extern double TakeProf_CtSl = 3.7;
 
sss2019:
Können Sie mir sagen, ob es eine Begrenzung für die Anzahl der Parameter in einem Nicht-Standard-Indikator gibt, wenn er über iCustom angeschlossen ist?

Ich habe es gibt einen Indikator mit etwa 8 Parametern Ich habe alle Parameter korrekt eingegeben und mehrmals überprüft, aber der Fehler ')' erscheint immer noch beim Kompilieren - falsche Parameteranzahl D:\InstaTrader\experts\Expert_2.mq4 (11, 280)

Ich würde sagen "etwa 80".
 

Entfernen Sie das "extern" von einigen der wenig genutzten Parameter, und es wird keine Verwirrung geben.

Achtung, meine Fragen:

Warum erscheinen Objekte unter Kerzenständern, was ist der Grund dafür?

Können Sie mich daran erinnern, wie man ein Kontrollkästchen zum Preis machen, was ist die Eigenschaft des Objekts.

Grund der Beschwerde: