Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 349

 

Ist es möglich, dynamische Eingabeparameter über iCustom an den Indikator zu übergeben? Wenn ich dies versuche, wird für jeden neuen dynamischen Eingabeparameter ein neues Indikatorfenster geöffnet.

   if(NewBarCur())BulsPeriod++;
   double sep_window=iCustom(Symbol(),PERIOD_CURRENT,"Bulls",BulsPeriod,0,0);
 
Und diese Frage, gibt es eine Möglichkeit zu wissen, ob z.B. noch 1 Balken oder 3 Minuten auf dem Testdiagramm übrig sind?
 
Artyom Trishkin:

In diesem Thread möchte ich damit beginnen, denjenigen zu helfen, die wirklich das Programmieren in der neuen MQL4 verstehen und lernen wollen und einfach zu MQL5 wechseln wollen - die Sprachen sind sehr ähnlich.

Dies ist ein guter Ort, um Aufgaben, Algorithmen zu ihrer Lösung und alle anderen Fragen im Zusammenhang mit der MT-Programmierung zu diskutieren.

Ich hoffe, dass andere erfahrene Mitglieder unseres Forums sich uns anschließen werden und der Thread für alle interessant sein wird.


Artyom Trishkin:

In diesem Zweig möchte ich damit beginnen, denjenigen zu helfen, die wirklich das Programmieren in der neuen MQL4 verstehen und erlernen wollen und leicht zu MQL5 wechseln wollen - die Sprachen sind sehr ähnlich.

Dies ist ein guter Ort, um Probleme, Algorithmen und andere Fragen zur MT-Programmierung zu diskutieren.

Ich hoffe, dass andere erfahrene Mitglieder unseres Forums sich uns anschließen werden, um die Probleme zu lösen, und dass der Thread für alle von Interesse sein wird.


Artyom Trishkin:

In diesem Zweig möchte ich damit beginnen, denjenigen zu helfen, die wirklich das Programmieren in der neuen MQL4 verstehen und erlernen wollen und leicht zu MQL5 wechseln wollen - die Sprachen sind sehr ähnlich.

Dies ist ein guter Ort, um Probleme, Algorithmen und andere Fragen zur MT-Programmierung zu diskutieren.

Ich hoffe, dass andere erfahrene Mitglieder unseres Forums sich uns anschließen werden und dieses Thema für alle interessant sein wird.


Artyom Trishkin:

In diesem Zweig möchte ich damit beginnen, denjenigen zu helfen, die wirklich das Programmieren in der neuen MQL4 verstehen und erlernen wollen und leicht zu MQL5 wechseln wollen - die Sprachen sind sehr ähnlich.

Dies ist ein guter Ort, um Probleme, Algorithmen und andere Fragen zur MT-Programmierung zu diskutieren.

Ich hoffe, dass andere erfahrene Mitglieder unseres Forums sich uns anschließen werden und dieses Thema für alle interessant sein wird.


Artyom Trishkin:

In diesem Zweig möchte ich damit beginnen, denjenigen zu helfen, die wirklich das Programmieren in der neuen MQL4 verstehen und erlernen wollen und leicht zu MQL5 wechseln wollen - die Sprachen sind sehr ähnlich.

Dies ist ein guter Ort, um Aufgaben, Algorithmen zu ihrer Lösung und alle anderen Fragen zu diskutieren, die auf die eine oder andere Weise mit der MT-Programmierung zusammenhängen.

Ich hoffe, dass andere erfahrene Mitglieder unseres Forums sich uns anschließen werden und dieses Thema für alle interessant sein wird.


Artjom

Artyom Trishkin:

Ich möchte dieses Kapitel beginnen, um denjenigen zu helfen, die das Programmieren in dem neuen MQL4 wirklich verstehen und lernen wollen und die leicht zu MQL5 wechseln wollen - die Sprachen sind sehr ähnlich.

Hier können Aufgaben, Algorithmen zu ihrer Lösung und alle anderen Fragen, die in irgendeiner Weise mit der MT-Programmierung zusammenhängen, diskutiert werden.

Ich hoffe, dass andere erfahrene Mitglieder unseres Forums sich uns anschließen werden, um die Probleme zu lösen, und dass der Thread für alle von Interesse sein wird.


Helfen Sie mir, ich habe Trailing Stop Funktion zu meinem EA hinzugefügt, ich habe es getestet und es gibt mir zwei Fehler. - Ich habe keine Ahnung, wie man sie repariert. Allerdings werden die Geschäfte nach der alten Strategie geschlossen, wenn der Kurs die obere bzw. untere Grenze des Kanals berührt hat. Ich denke, auch hier muss etwas geändert werden. - Rufen Sie die Jungs von der Armee des DNR zurück.

#property copyright "Copyright 2017, MetaQuotes Software Corp.

#property link "https://www.mql5.com"

#Eigenschaft Version "1.00"

#Eigenschaft streng


//---------------------------------------------------------

extern double Lots = 0,01;

extern int TakeProfit = 600;

extern int StopLoss = 25;

extern int Magic = 0001;

extern int Schlupf = 3;

extern int TralType = 0; // 0-SAR, 1-ATR, 2-HMA.

extern double SAR_Step = 0,02;

extern double SAR_Max = 0.2;

extern int ATR_Period = 14;

extern double ATR_K = 2.0;

extern inttern HMA_Zeitraum = 16;

extern intern HMA_Methode = 3;

extern inttern HMA_Shift = 0;

datetime LBT;

//---------------------------------------------------------

extern string TMA = "TMA-Indikatorparameter";

externer String TimeFrame = "aktueller Zeitrahmen";

extern int HalfLength = 56;

extern int Preis = "PRICE_CLOSE;

extern double ATRMultiplier = 2.0;

extern inttern ATRPeriod = 100;

extern bool Interpolate = true;

//---------------------------------------------------------

double PriceHigh, PriceLow, SL, TP;

int-Ticket;


//+------------------------------------------------------------------+

Experten-Initialisierungsfunktion //|.

//+------------------------------------------------------------------+

int OnInit()

{

if (Ziffern == 3 || Ziffern == 5)

{

TakeProfit *= 10;

StopLoss *= 10;

Schlupf *= 10;

}

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{


}

//+------------------------------------------------------------------+

//| Experten-Tick-Funktion |

//+------------------------------------------------------------------+

void OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

wenn (Ticket > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if (OrderSelect(ticket, SELECT_BY_TICKET))

if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Fehler bei der Auftragsänderung!)

}

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

wenn (Ticket > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Fehler beim Ändern der Kauforder!)

} else Print("Fehler beim Öffnen des Kaufauftrags");

}

//+------------------------------------------------------------------+

Experten-Initialisierungsfunktion //|.

//+------------------------------------------------------------------+

int init()

{

//--------


//--------

zurück (0);

}

//+------------------------------------------------------------------+

//| Experten-Tick-Funktion |

//+------------------------------------------------------------------+

void OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

wenn (Ticket > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if (OrderSelect(ticket, SELECT_BY_TICKET))

if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Fehler beim Ändern des Verkaufsauftrags!)

} else Print("Fehler beim Öffnen des Verkaufsauftrags!)

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

wenn (Ticket > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Fehler beim Ändern der Kauforder!)

} else Print("Fehler beim Öffnen des Kaufauftrags");

}

if (Ask <= PriceLow && CountSell() > 0)

{

for (int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Print("Fehler beim Schließen der Verkaufsorder!)

}

}

}

if (Bid >= PriceHigh && CountBuy() > 0)

{

for (int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Print("OrderClose Buy Fehler!)

}

}

}

}

//+------------------------------------------------------------------+

int CountSell()

{

int count = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(OrderSelect(Handel, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

zählen++;

}

}

return(count);

}//+------------------------------------------------------------------+

int CountBuy()

{

int count = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(OrderSelect(Handel, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

zählen++;

}

}

return(count);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

int deinit()

{

//+-------


//+-------

zurück (0)

}

//+------------------------------------------------------------------+

//| Expertenstartfunktion |

//+------------------------------------------------------------------+

int Start()

{

//-----

bool error = fals;

if (LBT!=Time[0]) {

if (OrdersTotal()!=0) {

for (int i=0; i<OrdersTotal(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

double SL = OrderStopLoss();

wenn OrderType()==0) {

switch (TralType) {

Fall 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

Pause;

Fall 1: SL = Hoch[1] - iATR(NULL,0,ATR,Zeitraum,1)*ATR_K;

Pause;

Fall 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);

Pause;

}

wenn (SL<OrderStopLoss())

SL = OrderStopLoss();

}

if (OrderType()==1) {

switch (TralType) {

Fall 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

Pause;

Fall 1: SL = Low[1] + iATR(NULL,0,ATR,Period,1)*ATR_K;

Pause;

Fall 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);

Pause;

}

wenn (SL>OrderStopLoss())

SL = OrderStopLoss();

}

wenn (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

Fehler = true;

}

}

}

}

wenn (!Fehler)

LBT = Zeit[0];

}

zurück (0);

}

//+------------------------------------------------------------------+

 
vkravtzov:

Lernen Sie, wie man Code einfügt!!!


Lernen Sie, Code einzufügen!!!


Lernen Sie, wie man Code einfügt!!!


Lernen Sie, wie man Code einfügt!!!


Lernen Sie, wie man Code einfügt!!!


Lernen Sie, wie man Code einfügt!!!


Lernen Sie, wie man Code einfügt!!!


Lernen Sie, wie man Code einfügt!!!


Lernen Sie, wie man Code einfügt!!!


Lernen Sie, Code einzufügen!!!

 
vkravtzov: Helfen Sie mir zu verstehen, ich habe Trailing-Stop-Funktion zu Expert Advisor hinzugefügt, ich habe es getestet und es gibt zwei Fehler. - Ich habe mir das Hirn zermartert und weiß nicht, wie ich es reparieren soll. Allerdings werden die Geschäfte nach der alten Strategie geschlossen, wenn der Kurs die obere bzw. untere Grenze des Kanals berührt hat. Ich denke, auch hier muss etwas geändert werden. - Rufen Sie die Jungs in der Armee des DNR zurück.

Ich beschloss zu helfen. Aber ich habe Fragen an den Autor - Sie haben diese beiden Initialisierungsfunktionen - was tun sie?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)
   {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
   }
   return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }

Es gibt zweiOnTick()-Funktionen.... und eine dritte Funktion int Start() - sie alle werden mit dem Eintreffen des Ticks ausgeführt. Und in welcher Reihenfolge wird das Terminal sie starten?

Fehler: am Ende der Funktion OnTick() fehlt eine schließende geschweifte Klammer

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
  PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
  if(CountSell() == 0 && Bid >= PriceHigh)
  {
     ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
     if (ticket > 0)
     {
        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
           if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на продажу!");
     }
  }
  if (CountBuy() == 0 && Ask <= PriceLow)
  {
     ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
     if (ticket > 0)
     {
        TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
        SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на покупку!");
     }   else Print("Ошибка открытия ордера на покупку");
   }
}    // Эту скобку добавил !!!!!!!!!!!!!!!!!!!!!!!!!

Jetzt hat der Compiler 8 Fehler entdeckt. Ich habe gelöscht.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }


//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
   return (0);
   }

Es gibt jetzt 7 Fehler.

Ich habe if(OrderType()==0) durch eine Klammer nach if ersetzt: if(OrderType()==0) - 8 Fehler aufgetreten

iATR(NULL,0,ATR,Periode,1) - wir brauchen iATR(NULL,0,ATR_Periode,1) - 2 Fehler sind aufgetreten

bool error = fals; wir brauchen bool error = false; - errors wurde 3

Wo können wir den Indikator VininI_HMAsound&amp bekommen? Welche Parameter gibt es? = der Fehler wäre immer noch 1

Und warum sollten Sie eine Frage an drei Stellen stellen?

 

Hilfe herunterladen und installieren kostenlose EAs und Signale auf mt4 nicht als neemogu finden Download vide nur, wie zu installieren, aber kein Download. Sag mir, wo ich suchen soll

 
vovik36 Степанов:

Hilfe herunterladen und installieren kostenlose EAs und Signale auf mt4 nicht als neemogu finden Download vide nur, wie zu installieren, aber kein Download. Bitte beraten Sie mich, wo ich suchen soll.

Erst graduieren, dann kommen.

 
Artyom Trishkin:

Wie ist das?


   for(i=pos; i<rates_total && !IsStopped(); i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1; k<=i; k++)
       {double ima=iMA(Symbol(),1,60,0,1,0,k);
         if(dmin>ima)  dmin=ima;
         if(dmax<ima)  dmax=ima;
                   Comment(ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

Hallo. Können Sie mir sagen, warum esima=iMA(Symbol(),1,60,0,1,0,k) nicht sieht. Der Kommentar enthält eine viel höhere Quote als die Zeile selbst. Das ist der Grund, warum die Mindest- und Höchstwerte nicht korrekt berechnet werden.

 
Rustam Bikbulatov:

Hallo. Können Sie mir sagen, warumima=iMA(NULL,60,24,0,1,0,k) nicht angezeigt wird? Durch den Kommentar wird eine viel höhere Quote angezeigt als in der Zeile selbst. Dies ist der Grund, warum die Mindest- und Höchstwerte nicht korrekt berechnet werden.

iMA ist eine Nummerierung wie in Zeitreihen, 0 ist die wichtigste Zahl. In Ihrem Fall könnte es umgekehrt sein
 
Maxim Kuznetsov:
iMA ist eine Nummerierung wie in Zeitreihen, 0 ist die wichtigste Zahl. Und bei Ihnen ist es wahrscheinlich genau umgekehrt.

Es ist eine ungewollte Wette. Es ändert sich nichts. Der eigentliche Punkt ist, dass es mit k falsch angezeigt wird!

Grund der Beschwerde: