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

 
Alexey Viktorov:

Ist es in Ordnung, dass dort steht

nichts, der Thread ist für MT4, also beachtet man ihn nicht

OK, mach dich an die Arbeit, hier ist es langweilig

 

Ich grüße alle. Viel Glück im Leben und Erfolg bei der Arbeit.

Ich bitte um Hilfe (unerwartet, nicht wahr? :) ).

In Mql bin ich ein zerobom, 2 Tage "im Thema". Wenn echte EA zwingt mich, den automatischen Handel zu verwenden, ich versuche zu schreiben (sammeln Sie es in Echtzeit aus verschiedenen Teilen) eine Eule für meine flache EA und natürlich bin ich immer müde von ihm :). Ich versuche seit etwa 10 Stunden, ein anderes Problem zu lösen, und ich bin immer noch nicht dazu gekommen. Wenn jemand mit Ratschlägen oder einem Beispiel helfen kann, wäre ich sehr dankbar (mündlich und schriftlich, und vor allem unter der Dusche).

Generell... Es gibt TC, das ich seit langem erfolgreich verwende. Bei Handelsbedingungen auf demselben Instrument können multidirektionale Marktaufträge (keine Pending). Die Verlustposition kann bei einem Handelssignal aufgefüllt werden, vorausgesetzt, dass die Position um mindestens X Pips gefallen ist, manchmal kann auch die Aktie aufgefüllt werden (unter den gleichen Bedingungen (Handelssignal + Drawdown-Größe)). Das (derzeitige) Problem besteht darin, zusätzliche Positionen zu eröffnen, nämlich... wie man den Wert des Verlustes einer Long-Position überprüft und zurückgibt. Nach dem Beispielvon https://www.mql5.com/ru/forum/117061 habe ich den Code so verändert, dass jeder Position ein eigener Magik zugewiesen wird, aber das war's auch schon. Wie man genau eine Position auswählt, die sich gesetzt hat, und ihren Verlustwert zurückgibt.... :(.

"mein" Code für die Eröffnung von Geschäften.

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

if (NumberOfPositions(Symbol(),OP_BUY, Magic)<1)

{

if (meine Teilnahmebedingungen)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); sonst TP = 0;

if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); sonst SL = 0;

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "BUY",Magic,0,Blue);

if(ticket < 0) { Print("Fehler beim Öffnen der BUY-Bestellung #", GetLastError());}

}}

if(NumberOfPositions(Symbol(),OP_SELL, Magic)<1)

{

if (meine Eingabebedingungen)

{

if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); sonst TP = 0;

if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); sonst SL = 0;

ticket=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),5,SL,TP, "SELL",Magic,0,Red);

if(ticket < 0) { Print("Error opening SELL order #", GetLastError());}

}}

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

Es ist geplant, weitere Aufträge mit folgendem Code zu eröffnen

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

if (NumberOfPositions(Symbol(),OP_BUY, Magic)==1 && NumberOfPositions(Symbol(),OP_BUY, Magic_2)<1)

{

if (meine Einstiegsbedingungen && GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic)>= LEVEL_1)

{

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "Extra Buy",Magic_2,0,Blue);

if(ticket < 0) { Print("Fehler beim Öffnen der BUY-Bestellung #", GetLastError()); }

} }

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

Und genau da bin ich hängen geblieben :). Was anstelle von GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic) zu verwenden ist. Ich glaube, ich muss Drawdown_level(Symbol(),OP_BUY,Magic) verwenden, aber wie bekomme ich es...

Hilfe BITTE, seid Freunde.
Z.U. Wenn Sie beraten, denken Sie bitte daran, dass ich immer noch nubyara, dass nicht zu faul, um mir ein wenig mehr Details zu senden, wissen Sie, wie wenn: WALD DORT, vergessen Sie nicht, auf die Richtung hinzuweisen <------ || ------>.

Vielen Dank für Ihre Aufmerksamkeit :).

код----доливаем по тренду
код----доливаем по тренду
  • 2009.05.07
  • www.mql5.com
Я пытался написать советник с открытием дополнительных лотов по тренду. Суть заключается вот в чем...
 
Igor Makanu:

Nichts, der Thread ist für MT4, also beachtet man ihn nicht.

Ok, mach dich an die Arbeit, es ist langweilig hier.

Sagen Sie mir, wo ein ähnlicher Zweig für MT5 ist, ich werde dort nachfragen...

 
Alexander Layzerevich:

Sagen Sie mir, wo ein ähnlicher Thread für MT5 ist, ich werde dort fragen...

Fragen Sie hier. Hier für beide Sprachen.
 
Alexey Viktorov:

Ist es OK, Folgendes anzugeben

Die hervorgehobene Funktion unterscheidet sich nicht von der Funktionsdeklaration. Es stellt sich heraus, dass die Funktion in den Eingabeparametern der Funktion deklariert ist.

In MT4 geht der Funktionsaufruf von Indicator ohne Fehler und funktioniert wie benötigt(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff);) Ich dachte, dass dies auch bei MT5 der Fall sein könnte.

Bitte beraten Sie mich, wie ich es richtig mache?

 
Alexander Layzerevich:

In MT4 geht der Funktionsaufruf von Indicator ohne Fehler und funktioniert wie benötigt(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff);) Ich dachte, dass dies auch bei MT5 der Fall sein könnte.

Können Sie mir sagen, wie man es richtig macht?

Es ist unmöglich, die Daten der Umschläge in mql4 abzurufen.
 
Artyom Trishkin:
Es ist also unmöglich, die Daten der Umschläge in mql4 zu erhalten.

Hier ist der Code von MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Alles funktioniert perfekt. Ich möchte dasselbe in MT5

 
Alexander Layzerevich:

Hier ist der Code von MT4

Alles funktioniert perfekt. Ich möchte dasselbe in MT5

Das liegt daran, dass es sich um einen anderen Code handelt und er funktioniert.
 
Artyom Trishkin:
Das liegt daran, dass es sich um einen anderen Code handelt, und der wird funktionieren.

Der MT5-Code zum Senden von Daten an den Indikator wurde korrigiert:

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIMEFRAMES    TimeFrames    = PERIOD_M5;             // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = MODE_SMMA;             // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE;           // Tип цены
//************************************************************************************************/
void OnTick()
{
double Signal_Buy = (int)Envelopes(Symbol(), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, 2,  Deviation(1)); // Сигнал на Покупку
}
//************************************************************************************************/
double Envelopes(string symb, ENUM_TIMEFRAMES tf, int period, int shift, int method, int price, int buff, double Deviation(int kanal))
{
  double buf[1];
  int handle=iEnvelopes(Symbol(), tf, period, shift, method, price, Deviation(kanal));
   if(handle<0)
   {
    Print("Failed to create handle ATR, Error: ",GetLastError());
    return(WRONG_VALUE);
   } else
   {
    if(CopyBuffer(handle,buff,0,1,buf)<0)
    {
     Print("Failed to copy data from the indicator ATR, Error: ",GetLastError());
     return(WRONG_VALUE);
    }
   }
   return(buf[0]);
}
//************************************************************************************************/

Aber der Fehler ist derselbe.

 
Alexander Layzerevich:

Hier ist der Code von MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Alles funktioniert perfekt. Ich möchte dasselbe in MT5

Achten Sie auf Ihre Hände:

In meinem vorherigen Beitrag wird dies in Ihrem Code hervorgehoben

double Deviation(int Time_Frames, int _Kanal)

und in diesem Code ist die zitierte Nachricht eine Funktionsdeklaration. Ebenfalls hervorgehoben.

Und dies

Deviation(TimeFrames, Kanal)

Aufrufen einer vorhandenen Benutzerfunktion. Auch wenn diese Programmiermethode für mich nicht akzeptabel ist, so ist sie doch verständlich. Aber wie ich den Fehler in diesem Code beschreiben soll, ist mir ein Rätsel.