Ich werde einen kostenlosen mql4-Berater schreiben - Seite 13

 
oleg3791: der Berater zeichnete vier Linien bei fünf Mausklicks auf das Diagramm

Erforderliche Zeilen in gelb

#property strict

int      Количество;
datetime старый, новый=0;
double   старая, новая=0;

void OnInit()
{
  Количество=0;
  ObjectsDeleteAll(0, "Линия");
}

void OnChartEvent(const int     id,  // идентификатор события   
                  const long &x, const double &yy,
                  const string& s)
{
  if(id!=CHARTEVENT_CLICK) return;
  if(Количество>4){OnInit();return;}
  string name[5]={"","Линия_1","Линия_2","Линия_3","Линия_4"};
  int y=int(yy);
  int O;
  старый=новый; старая=новая;
  ChartXYToTimePrice(0,int(x),y,O,новый,новая); // xy ---> время,цену
  if(Количество>0)
  ObjectCreate(name[Количество],OBJ_TREND,0,старый,старая,новый,новая);
  ObjectSet(name[Количество],OBJPROP_RAY,false);
  ObjectSet(name[Количество],OBJPROP_COLOR,Gold);
  ObjectSet(name[Количество],OBJPROP_WIDTH,2);
  Количество++; 
}

void OnDeinit(const int причина)
{
  OnInit();
}
 
STARIJ:

Gelbe Linien erforderlich

Ich danke Ihnen!!!
 
oleg3791:   Ich danke Ihnen!!!

Nun sagen Sie mir, wie man hier Gewinn macht... Oder geht es darum, ein Spiel zu entwickeln?

 

Hallo an alle, können Sie mir bitte helfen, einen Fehler im Code des EA zu finden, ich denke, ich habe alles durchgeschaut, es scheint alles richtig im Code geschrieben zu sein, aber das Programm handelt aus irgendeinem Grund nicht richtig! Die Idee ist folgende: Der Advisor muss nach zwei langen Kerzen der gleichen Richtung suchen (die Länge zwischen den Kerzen ist im Advisor einstellbar, d.h. zwischen den beiden Minimal- oder Maximal-Kerzen, je nach Richtung), wenn der Preis in der entgegengesetzten Richtung das Minimum oder Maximum der letzten Kerze durchbricht, sollte ein Geschäft eröffnet werden (Beispielbildsituationen auf dem der Datei beigefügten Chart). Der Berater sollte in jeder geeigneten Situation Geschäfte eröffnen, aber aus irgendeinem Grund eröffnet er nur in den Handelsfenstern zwischen den Tagen Geschäfte. Hier ist die Situation, die nicht schwierig ist, von Programmierern, bitte helfen, beheben Sie den Fehler. EA-Code siehe unten sowie in der angehängten Datei.

//+-----------------------------------------------------------------------------------------------+
//|                                                                           Spacing_Candles.mq4 |
//|                                                                        Copyright 2017, Vladim |
//|                                                                            vk.com/id229534564 |
//|                                                                  Mail: Vladim120385@yandex.ru |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2017, Vladim"
#property link      "vk.com/id229534564"
#property version   "1.00"
#property strict

//--- параметры советника
extern string paramEA    = "";     // Parameters EA
extern double volume     = 0.01;   // Volume
extern double stopLoss   = 5;     // StopLoss
extern double takeProfit = 1.5;    // TakeProfit
extern double maxSpacing = 150;   // MaxSpacing
extern double minSpacing = 30;    // MinSpacing
extern double TrailingStop  = 0;   // TrailingStop
extern int    magic      = 127;    // Magic

//--- глобальные переменные
datetime newCandle;
int tip;

//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
   
   return(INIT_SUCCEEDED);
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   
}
//+-----------------------------------------------------------------------------------------------+
void OnTick()
{
   if(newCandle != Time[0]) FindPattern();
   newCandle = Time[0];
}
//+-----------------------------------------------------------------------------------------------+
void OpenOrder(int type)   // Откроем рыночный ордер
{
   if(type == OP_BUY)  if(OrderSend(_Symbol, OP_BUY,  volume, Ask, 0, 0, 0, "", magic, 0)) SetSLTP(OP_BUY);
   if(type == OP_SELL) if(OrderSend(_Symbol, OP_SELL, volume, Bid, 0, 0, 0, "", magic, 0)) SetSLTP(OP_SELL);
}
//+-----------------------------------------------------------------------------------------------+
void SetSLTP(int type)   // Установим стоп приказы
{
   double sl = 0;
   double tp = 0;
   
   if(type == OP_BUY)
      for(int i = 0; i < OrdersTotal(); i++)
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_BUY && OrderStopLoss() == 0)
            {
               sl = NormalizeDouble(Low[1] - stopLoss * _Point, _Digits);
               tp = NormalizeDouble(OrderOpenPrice() + (OrderOpenPrice() - Low[1]) * takeProfit, Digits);
               if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) return;
            }
   if(type == OP_SELL)
      for(int i = 0; i < OrdersTotal(); i++)
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_SELL && OrderStopLoss() == 0)
            {
               sl = NormalizeDouble(High[1] + stopLoss * _Point, _Digits);
               tp = NormalizeDouble(OrderOpenPrice() - (High[1] - OrderOpenPrice()) * takeProfit, Digits);
               if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) return;
            }
}
//+-----------------------------------------------------------------------------------------------+
void FindPattern()   // Ищем большое расстояние между свечами
{
   if(High[1] < High[2] && Bid > High[1] && Low[1] < Low[2])
   {
      double spacing = NormalizeDouble((High[2] - High[1]) / _Point, 0);
            
      if(maxSpacing >= spacing && minSpacing <= spacing)
         OpenOrder(OP_BUY);
   }
   if(Low[1] > Low[2] && Bid < Low[1] && High[1] > High[2])
   {
      double spacing = NormalizeDouble((Low[1] - Low[2]) / _Point, 0);
            
      if(maxSpacing >= spacing && minSpacing <= spacing)
         OpenOrder(OP_SELL);
   }   
   {
      if (TrailingStop!=0) TrailingStop();      
   }
}
//+-----------------------------------------------------------------------------------------------+
void TrailingStop()
{
   double StLo,OSL,OOP;
   bool error=true;   
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS))
      {
         tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
         {
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            if (tip==0)        
            {  
               StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
               if (StLo < OOP) continue;
               if (StLo > OSL)
                  error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);

            }                                         
            if (tip==1)    
            {                                         
               StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);           
               if (StLo > OOP) continue;
               if (StLo < OSL || OSL==0 )
                  error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);
            } 
            if (!error) Alert("Error TrailingStop ",GetLastError(),"   ",Symbol(),"   SL ",StLo);
         }
      }
   }
}
//+-----------------------------------------------------------------------------------------------+


Foto der Tabelle "Wie ein EA wetten sollte".

Dateien:
 
Vladim1203:

Hallo an alle, können Sie mir bitte helfen, einen Fehler im Code des EA zu finden, ich denke, ich habe alles durchgesehen, es scheint richtig in den Code geschrieben worden zu sein, aber das Programm handelt nicht korrekt aus irgendeinem Grund! Die Idee ist folgende: Der Advisor muss nach zwei langen Kerzen der gleichen Richtung suchen (die Länge zwischen den Kerzen ist im Advisor einstellbar, d.h. zwischen den beiden Minimum- oder Maximum-Kerzen, je nach Richtung), wenn der Preis in der Gegenrichtung das Minimum oder Maximum der letzten Kerze durchbricht, sollte ein Geschäft eröffnet werden (Beispielbildsituationen auf dem Chart im Anhang der Datei). Der Berater sollte in jeder geeigneten Situation Geschäfte eröffnen, aber aus irgendeinem Grund eröffnet er nur in den Handelsfenstern zwischen den Tagen Geschäfte. Hier ist die Situation, die nicht schwierig ist, von Programmierern, bitte helfen, beheben Sie den Fehler. Siehe den EA-Code unten und in der angehängten Datei.

Es ist besser, zuerst den Teil des EAs zu schreiben, der die gefundenen Kerzen auf dem Chart markiert, damit alles klar wird. Und die folgenden Zeilen sind in Ihrem Fall unnötig:

extern string paramEA    = "";     // Parameters EA

и

//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
   
   return(INIT_SUCCEEDED);
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   
}
//+-----------------------------------------------------------------------------------------------+
 
STARIJ:

Und jetzt sagen Sie mir, wie man hier Gewinn machen kann... Oder brauchen Sie es, um ein Spiel zu entwickeln?


Es gibt noch keine Möglichkeit, einen Gewinn zu erzielen. Es gibt einen Algorithmus zur Berechnung von zwei wahrscheinlichen Kurszielen entlang des Trends anhand von fünf Hauptpunkten, aber er wird auf einem speziellen Server mit einem kostenpflichtigen Abonnement berechnet. Ich möchte die Ziele selbst berechnen, die Arbeit an dem Algorithmus ist noch nicht abgeschlossen.

Wie wird Ihr Programm in MQL4 aussehen?

 
Anton Yakovlev:
Wenn Sie eine gute Strategie haben und bereit sind, sie zu teilen, kann ich einen EA schreiben. Ich lade Sie ein, es entweder öffentlich oder in einer privaten Nachricht zu diskutieren.

Anton, helfen Sie mir, ich habe Trailing-Stop-Funktion, um die EA hinzugefügt, ich habe es kompiliert und es zeigt zwei Fehler. - Ich habe mir den Kopf zerbrochen, ich weiß nicht, wie ich sie 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. - Rückruf an die DNR-Armee.

#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))

error = true;

}

}

}

}

wenn (!Fehler)

LBT = Zeit[0];

}

zurück (0);

}

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

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Andrey Luxe:

Um Erfahrungen in diesem Bereich zu sammeln, werde ich 25 EAs kostenlos für Ihre interessanten Ideen und Strategien schreiben

Nur noch 19 EAs übrig


Ich habe dieTrailing-Stop-Funktion zu EA hinzugefügt und kommentiert, und sie produziert zwei Fehler. - Ich habe vielleicht einige Fehler, aber ich weiß nicht, wie ich sie beheben kann. Allerdings werden die Geschäfte nach der alten Strategie geschlossen, wenn der Preis die obere Grenze des Kanals bzw. die untere Grenze berührt hat. Ich denke, auch hier muss etwas geändert werden. - Rückruf an die DNR-Armee.

#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);

}

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

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
vkravtzov:

Ich habe dieTrailing-Stop-Funktion zum Expert Advisor hinzugefügt, und ich habe sie kompiliert und zwei Fehler erhalten. - Ich habe den Verstand verloren, weil ich nicht weiß, wie ich sie reparieren kann, um eine Eule zu bekommen. 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. - Geben Sie es den Jungs von der Armee der DVR zurück.


Kein Grund zum Spammen.
 
Victor Nikolaev:
Sie sollten nicht spammen.

Ich entschuldige mich, wenn ich etwas falsch gemacht habe. Ich verstehe immer noch nicht, wie ich gespammt habe... Ich glaube, ich habe zwei Nachrichten an zwei Kameraden gerichtet. Oder ist das nicht erlaubt? - Mein Fehler.