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

 
Nun, hat jemand bereits ein RSI iMAOnArray einsatzbereit?
 
berezhnuy:
Nun, hat jemand bereits ein RSI iMAOnArray einsatzbereit?

Ich kann verstehen, warum Ihnen niemand mit viel "Hilfe" geantwortet hat...
 
berezhnuy:
Nun, hat jemand bereits ein RSI iMAOnArray einsatzbereit?

es gibt eine in der kodobase, man muss sie nur nachschlagen
 
Kameraden. Ich beschloss, eine einfache Absorptionsanzeige zu erstellen, um zu üben. Aber am Ende gab es das Problem, dass, wenn ich den Zeitrahmen auf dem Diagramm ändere und zu dem Zeitrahmen mit der Absorption zurückkehre, der Alarm wieder ausgelöst wird. Ich habe eine Option gefunden, die nur einmal pro Bar alarmiert, aber auch hier wird alles zurückgesetzt, wenn ich den Zeitrahmen wechsle.
if (Bars != ThisBarTrade ) {
   ThisBarTrade = Bars;  // ensure only one trade opportunity per bar
   // Trade logic goes here
}
Hier ist der Code selbst, ohne grafische Zeichnungen, nur mit Logik. Wie kann man sie korrigieren?
   if(engulfAlerter && Open[2]>Close[2] && Open[1]<Close[1] && Close[1]>Open[2])
      {
         Alert("Bullish Engulf");
      }
   if(engulfAlerter && Open[2]<Close[2] && Open[1]>Close[1] && Close[1]<Open[2])
      {
         Alert("Bearish Engulf");
      }
P.S. Der Induktor setzt die Bedingung "ThisBarTrade" während der Deinitialisierung zurück, während er zu anderen Zeitrahmen wechselt.
 

Können Sie mir sagen, wie ich das Ticket separat kaufen und verkaufen kann?

ticket=OrderSend("EURUSD",OP_SELL,SellLot,Bid,3,0,0,",MAGICMA,0,Red);


sonst

{

OrderSelect(ticket-3,SELECT_BY_POS,MODE_TRADES);

OrderClose(ticket-3,SellLot,Ask,3,Red);


}

Ticket-3 speziell, TK-Handel ist eine Art Durchschnittspreis über mehrere Aufträge ), aber wie trenne ich Buy Tickets von Sell Tickets ? damit ich einen Auftrag nehmen kann, der vor 3 Buchten geöffnet wurde ) Auch für den Verkauf

 

Hallo Freunde!) Ich habe ein solches Problem:

Ich schrieb ein Prog, das eine Vorlage (mit den Indikatoren und grafischen Objekt, das ich brauche) beim Start öffnet, dann analysiert die Daten und Trades. wenn ich es nur auf einem Diagramm laufen, alles funktioniert gut. wenn ich es in einem Tester laufen, es funktioniert nur, wenn visualisiert. ich verstehe, dass die Vorlage nur auf einem visuell geöffneten Chart geladen werden kann... Es funktioniert also nicht im normalen Testmodus, weil es nur auf dem Diagramm läuft, ohne die Vorlage zu laden... Und was ist mit der Optimierung? Ich habe eine ganze Reihe von Parametern, und irgendwie ist es sehr unvernünftig, jede Option manuell mit der Visualisierung auszuführen.

Hilfe plz)) wie können Sie das Problem mit der Optimierung und Vorlage zu lösen?

 
evillive:

Ergebnis ))))


Aber ich habe nicht in MQL geschrieben, sondern formell, das ist das Problem (:

Und wie lässt sich das feststellen?

Da die Anzahl der Werte sehr begrenzt ist, können wir sie mit einer direkten Brute-Force-Methode überprüfen:

#property strict

/******************************************************************************/
void fun1(int const A) {
  Print("fun1()");

  if (A == 0 || A == 1) {
    Print("fun1 do!");
  }
}

/******************************************************************************/
void fun2(int const A) {
  Print("fun2()");

  if (A != 2) {
    Print("fun2 do!");
  }
}

/******************************************************************************/
void Гарантия_0_1_2(int const A) {
  switch (A) {
  case 0:
  case 1:
  case 2:
    fun1(A);
    fun2(A);
    break;
  default:
    Print("Не соблюдены условия (теоремы)");
  }
}

/******************************************************************************/
void OnStart() {
  for (int A = 0, limit = 4; A < limit; A++) {
    Print("Проверяем для A = ", A);
    Гарантия_0_1_2(A);
  }
}

Hier erhalten wir:

22:52:38 Script 3 EURUSDm,H1: loaded successfully
22:52:38 3 EURUSDm,H1: initialized
22:52:38 3 EURUSDm,H1: Проверяем для A = 0
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 1
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 2
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: Проверяем для A = 3
22:52:38 3 EURUSDm,H1: Не соблюдены условия (теоремы)
22:52:38 3 EURUSDm,H1: uninit reason 0
22:52:38 Script 3 EURUSDm,H1: removed

Es stellt sich heraus, dass sie gleich sind. Wenn es nicht 3, sondern z.B. 3 Millionen Werte gäbe, könnte man immer noch eine maschinelle Prüfung durchführen - die Ergebnisse der Funktionen zurückgeben und sie vergleichen. Wird für den gesamten Bereich kein Unterschied festgestellt, so sind sie gleich.

Wird anstelle einer Variablen ein Ausdruck verwendet, z. B. ein Funktionsaufruf, dann wird die Äquivalenz wegen des Kurzschlusses bei der Berechnung logischer Ausdrücke zur "Äquivalenz mit Vorbehalt".

 

Hallo zusammen!

Einen Indikator auf der Grundlage eines anderen Indikators erstellt.

Der erste Puffer zählt, wie er soll.

Die zweite nicht: Ich möchte, dass die Zählung bei jedem Balken nach "line1 > 0" beginnt.

Das ist im Grunde das, was ich in meinem Expert Advisor gemacht habe:

if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара

Und nach "shift >= shet" wird die Zeichenbedingung ausgelöst.

Wenn ich die externen Parameter der Variablen "shet" ändere, ändert sich der Indikator nicht.

Was könnte das Problem sein?

Indikator-Code:

#property indicator_buffers 2
#property indicator_color1 Lime 
#property indicator_color2 Red
//--- input parameters
extern int       Period_MA_r=14;
extern int       r2          =7;
extern int       Period_MA_1=46;
extern int       p2          =19;
extern int       shet=7;
extern int       s        =0;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,119);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,shift;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for(i=limit1;i>=0;i--) 
   {
   line1=0;
   signal_line=0;
   line1=iCustom(NULL,0,"indikator1",Period_MA_r,r2,1,i+0);
   signal_line=iCustom(NULL,0,"indikator2",Period_MA_1,p2,0,i+0);
   
   if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
   if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара
   if (line1 == 0){time=0;}//если индикатор равен нолю, то время сбрасывается на ноль
   if (line1 > 0 && signal_line < s){ExtMapBuffer1[i]=Low[i]-95*Point;}
   if (line1 > 0 && shift >= shet && signal_line < s){ExtMapBuffer2[i]=High[i]+95*Point;}
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

Hallo zusammen!

Einen Indikator auf der Grundlage eines anderen Indikators erstellt.

Der erste Puffer zählt, wie er soll.

Die zweite nicht: Ich möchte, dass die Zählung bei jedem Balken nach "line1 > 0" beginnt.

Das ist im Grunde das, was ich in meinem Expert Advisor gemacht habe:

Und nach "shift >= shet" wird die Zeichenbedingung ausgelöst.

Wenn ich die externen Parameter der Variablen "shet" ändere, ändert sich der Indikator nicht.

Was könnte das Problem sein?

Indikator-Code:


Es gibt einige Verwirrung über das Hinzufügen von 0, aber versuchen Sie es auf diese Weise:

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted(),
   i,limit1,shift = 0;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>=0;i--) 
   {
       line1=0.;
       signal_line=0.;
       line1 = iCustom (_Symbol, _Period,"indikator1",Period_MA_r,r2,1, i+0);       // Не понятно - зачем прибавлять 0 ???
       signal_line = iCustom (_Symbol, _Period,"indikator2",Period_MA_1,p2,0,i+0);  // Не понятно - зачем прибавлять 0 ???
   
       if (line1 > 0. && time == 0) {time = Time[i+0];}                   //сработало предварительное условие входа, записываем время [тоже + 0]
       if (time > 0.) shift= i + iBarShift (_Symbol, _Period, time);      //находим индекс бара
       if (line1 == 0.) {time = 0;}                                       //если индикатор равен нолю, то время сбрасывается на ноль
       if (line1 > 0.)
       {
           if (signal_line < s)
           {
               ExtMapBuffer1[i] = Low[i] - 95.*Point;
               if (shift >= shet) {ExtMapBuffer2[i] = High[i]+95.*Point;}
           }
       }
   }
   return(0);
}
//+------------------------------------------------------------------+
 

Guten Tag.

Wenn ich im Terminal einen Doppelklick auf die Auftragszeile mache, öffnet sich ein Änderungsfenster.

Wenn jedoch der Eröffnungskurs eines Auftrags und der Take-Profit eines anderen Auftrags auf einer Linie liegen, wird der zuletzt geänderte Auftrag eröffnet.

Bitte teilen Sie uns mit, ob mql4 über eine Funktion verfügt, mit der man das Fenster zur Änderung von Aufträgen öffnen kann, indem man den entsprechenden Auftrag im Indikator anklickt?