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

 
amsgif80 #:

Dies ist der Code, den ich versucht habe, einzufügen:

Am Anfang des Codes werfen diese:
enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // nur kaufen
DIRECTION_SELL = 1, // nur verkaufen
DIRECTION_ANY = 2, // kaufen & verkaufen
};

input ENUM_DIRECTION inp_direction = DIRECTION_ANY; // erlaubte Handelsrichtung


weiter finden, wo im Code öffnet kaufen und wo verkaufen. Schauen Sie in die start() oder OnTick() Funktion
wo buy in den Bedingungen steht:
if(inp_direction!=DIRECTION_SELL)
wo sell in den Bedingungen steht:
if(inp_direction!=DIRECTION_BUY )

Wo haben Sie es hingelegt?
 
MakarFX #:
Wo haben Sie es eingesetzt?
//+------------------------------------------------------------------+
//| Gleitende Durchschnitte.mq5 |
//| Copyright 2009-2013, MetaQuotes Software Corp.
//+------------------------------------------------------------------+





#property copyright "Copyright 2009-2013, MetaQuotes Software Corp.
#property link"https://www.mql5.com"
#Eigenschaft Version "1.00"

enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // nur kaufen
DIRECTION_SELL = 1, // nur verkaufen
DIRECTION_ANY = 2, // Kaufen & Verkaufen
};

input ENUM_DIRECTION inp_direction = DIRECTION_ANY; // erlaubte Handelsrichtung

#include <Handel.mqh>

input double MaximumRisk = 0.02; // Maximales Risiko in Prozent
input double DecreaseFactor = 3; // Verkleinerungsfaktor
input int MovingPeriod = 12; // Gleitender Durchschnittszeitraum
input int MovingShift = 6; // Verschiebung des gleitenden Durchschnitts



//---
int ExtHandle=0;


//+------------------------------------------------------------------+
Experteninitialisierungsfunktion //|
//+------------------------------------------------------------------+




int OnInit(void)
{
//---
ExtHandle=iMA(_Symbol,_Periode,MovingPeriode,MovingShift,MODE_SMA,PRICE_CLOSE);
if(ExtHandle==INVALID_HANDLE)
{
printf("Fehler beim Erstellen des MA-Indikators");
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick(void)
{
//---
if(PositionSelect(_Symbol))
CheckForClose();
sonst
CheckForOpen();
//---
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Berechnung der optimalen Losgröße |
//+------------------------------------------------------------------+
double TradeSizeOptimized(void)
{
double price=0.0;
double margin=0.0;
//--- Losgröße berechnen
if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,Preis))
return(0.0);
if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,Preis,Marge))
return(0.0);
if(Marge<=0.0)
return(0.0);

double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/margin,2);
//--- Berechnung der Länge einer Serie von ununterbrochenen Verlustgeschäften
if(DecreaseFactor>0)
{
//--- Abfrage des gesamten Handelsverlaufs
HistorySelect(0,TimeCurrent());
//--
int orders=HistoryDealsTotal(); //Gesamtzahl der Abschlüsse
int losses=0; // Anzahl der Verlustgeschäfte in der Serie

for(int i=Bestellungen-1;i>=0;i--)
{
ulong ticket=HistoryDealGetTicket(i);
if(ticket==0)
{
Print("HistoryDealGetTicket fehlgeschlagen, kein Handelsverlauf");
Pause;
}
//--- Prüfung auf Handelssymbol
if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=_Symbol)
weiter;
//--- Gewinn prüfen
double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
if(Gewinn>0,0)
Pause;
if(Gewinn<0,0)
Verluste++;
}
//---
if(Verluste>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- Normalisierung und Prüfung auf zulässige Werte des Handelsvolumens
double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
lot=stepvol*NormalizeDouble(lot/stepvol,0);

double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
if(lot<minvol)
lot=minvol;

double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
if(Los>maxvol)
lot=maxvol;
//----Rückgabe des Wertes des Handelsvolumens
zurück(lot);
}


//+------------------------------------------------------------------+
//| Prüfung auf offene Positionen |
//+------------------------------------------------------------------+
void CheckForOpen(void)
{
MqlRates rt[2];
//--- Preiswerte kopieren
if(CopyRates(_Symbol,_Zeitraum,0,2,rt)!=2)
{
Print("CopyRates von ",_Symbol," fehlgeschlagen, kein Verlauf");
Rückkehr;
}
//----Handeln nur beim ersten Tick des neuen Balkens
if(rt[1].tick_volume>1)
Rückkehr;
//--- aktuellen Wert des Indikators Gleitender Durchschnitt ermitteln
double ma[1];
if(CopyBuffer(ExtHandle,0,0,1,ma)!=1)
{
Print("CopyBuffer from iMA failed, no data");
Rückkehr;
}
//--- Signalprüfung
ENUM_ORDER_TYPE signal=WRONG_VALUE;

if(rt[0].open>ma[0] && rt[0].close<ma[0])
signal=ORDER_TYPE_SELL; // Bedingung für den Verkauf if(inp_direction!=DIRECTION_BUY)
sonst
{
if(rt[0].open<ma[0] && rt[0].close>ma[0])
signal=ORDER_TYPE_BUY; // Bedingung zum Kauf if(inp_direction!=DIRECTION_SELL)
}
//--- zusätzliche Prüfungen
if(signal!=WRONG_VALUE)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Balken(_Symbol,_Periode)>100)
{
CTrade Handel;
trade.PositionOpen(_Symbol,Signal,TradeSizeOptimized(),
SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK,)
0,0);
}
//---
}
//+------------------------------------------------------------------+
//| Prüfung auf enge Positionsbedingungen |
//+------------------------------------------------------------------+
void CheckForClose(void)
{
MqlRates rt[2];
//--- Preiswerte kopieren
if(CopyRates(_Symbol,_Zeitraum,0,2,rt)!=2)
{
Print("CopyRates von ",_Symbol," fehlgeschlagen, kein Verlauf");
Rückkehr;
}
//----Handeln nur beim ersten Tick des neuen Balkens
if(rt[1].tick_volume>1)
Rückkehr;
//--- aktuellen Wert des Indikators Gleitender Durchschnitt ermitteln
double ma[1];
if(CopyBuffer(ExtHandle,0,0,1,ma)!=1)
{
Print("CopyBuffer from iMA failed, no data");
Rückkehr;
}
//--- Ermitteln des Typs der Position, die zuvor mit PositionSelect() ausgewählt wurde.
bool signal=false;
long type=PositionGetInteger(POSITION_TYPE);

if(type==(long)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].close<ma[0])
signal=true;
if(type==(long)POSITION_TYPE_SELL && rt[0].open<ma[0] && rt[0].close>ma[0])
signal=true;
//--- zusätzliche Prüfungen
if(Signal)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Balken(_Symbol,_Periode)>100)
{
CTrade Handel;
trade.PositionClose(_Symbol,3);
}
//---
}
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 

Dieser Abschnitt sollte folgendermaßen aussehen

 //--- проверка сигналов
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

   if(rt[0].open>ma[0] && rt[0].close<ma[0])
     {
      if(inp_direction!=DIRECTION_BUY)
         signal=ORDER_TYPE_SELL;
     }
   else
     {
      if(rt[0].open<ma[0] && rt[0].close>ma[0])
        {
         if(inp_direction!=DIRECTION_SELL)
            signal=ORDER_TYPE_BUY;
        }
     }
 //--- дополнительные проверки 
 
MakarFX #:

Dieser Abschnitt sollte folgendermaßen aussehen.

Makar, dieser hier.

      if(inp_direction==DIRECTION_SELL||inp_direction==DIRECTION_ANY)

wird besser durch diese ersetzt.

      if(inp_direction!=DIRECTION_BUY)
 
Alexey Viktorov #:

Makar, dieser hier

wird besser durch diese ersetzt.

Ersetzt)
 
MakarFX #:

Dieser Abschnitt sollte folgendermaßen aussehen

Ich danke Ihnen aus tiefstem Herzen! Es hat alles auf einmal funktioniert, es funktioniert. Und ich habe mir schon den Kopf darüber zerbrochen, wie ich das anstellen soll))

 
Darf ich Ihnen dieselbe Frage noch einmal stellen, aber in Bezug auf meinen eigenen einfachen, mit dem Editor erstellten Expert Advisor? Ich dachte, dass ich es jetzt selbst schaffe, aber ich weiß nicht, wo ich diesen Kauf-/Verkaufscode einfügen soll. Ich weiß nicht, wo ich diesen Kauf-/Verkaufscode einfügen soll.
 
amsgif80 #:
Darf ich Ihnen dieselbe Frage noch einmal stellen, aber in Bezug auf meinen eigenen einfachen, mit einem Editor erstellten EA? Ich dachte, dass ich es jetzt selbst schaffe, aber das ist nicht so einfach. Ich kann nicht herausfinden, wo ich diesen Kauf-/Verkaufscode einfügen soll.
Zeigen Sie mir
 
amsgif80 #:

Ich habe Ihnen gezeigt, wie Sie den Code im Forum einfügen können


 
MakarFX #:

Sie haben nichts verändert.

Ihre Berufung

ist drinnen.

Makar danke für den Tipp

Grund der Beschwerde: