Ein wenig Nachbesserung ist nötig - Seite 12

 
dann wird es lange dauern, bis wir lernen......... ein paar Jahre sicher!
 
Сергей Дыбленко:
dann wird es lange dauern, bis sie studiert......... ein paar Jahre mit Sicherheit!

Nun, ich habe versucht, seit 2013 zu lernen, und bisher habe ich nur versucht, durch Stochern zu lernen, chemisch für mich und versuchen, es richtig zu machen, ich denke, es gibt eine Menge von unnötigen und vielleicht nicht, wie es sein sollte

- Aber ich überprüfe, ob das, was mir vorschwebt, funktioniert, es ist mir egal, ob es überflüssig ist, Hauptsache, es funktioniert.

 
Сергей Дыбленко:
dann wird es lange dauern, bis wir lernen......... ein paar Jahre sicher!

Sie müssen nur verstehen, was Sie von einem Experten wollen - alle Funktionen sind in der kodobase in den Skripten in den Experten

 
Ich bin auch auf der Suche nach einem weniger genauen Indikator für mich und machen einen EA für sie..... Wie Sie bemerkt haben, habe ich nie etwas gepostet, genau wie Sie durch Versuch und Irrtum zu tun.
 
Сергей Дыбленко:
ich bin auch auf der Suche nach einem weniger genauen Indikator für mich selbst und würde gerne einen Advisor für it..... entwickeln, da ich bemerkt habe, dass ich nichts gepostet habe, genau wie Sie habe ich versucht und bin gescheitert, etwas zu bauen

Ich habe alle Seiten gelesen und nichts verstanden, also habe ich angefangen, Expert Advisors einzubauen - so wie Sie es jetzt tun.

und langsam habe ich herausgefunden, wie die Terminal EAs aufgebaut sind und wie sie funktionieren

 

Nun, sehen Sie... Ich habe den Expert Advisor Sample MacDi geändert und er öffnet den Auftrag nicht!

Ich habe nichts angerührt, ich habe nur meinen eigenen Indikator verschrieben!

//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;

extern double ADXperiod1 = 10;
extern double ADXperiod2 = 14;
extern double ADXperiod3 = 20;

double Points;
//---- indicator parameters
//extern int ADXperiod1 = 10;
//extern int ADXperiod2 = 14;
//extern int ADXperiod3 = 20;
extern bool UseAlertHorizontalLine=false;
extern bool UseAlertUpDownArrows=false;
//---
string Unq="TASSKlT",Label;
int MxP,MnP,MdP;
double was_alert_hl = EMPTY_VALUE; // Horizontal line
double was_alert_au = EMPTY_VALUE; // Arrow up
double was_alert_ad = EMPTY_VALUE; // Arrow down
//---- buffers
double To[];
double Tc[];
double ADX1[];
double ADX2[];
double ADX3[];
double Up[];
double Dn[];
double Ex[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init ()
  {
   Points = MarketInfo (Symbol(), MODE_POINT);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent=0, MacdPrevious=0, SignalCurrent=0;
   double SignalPrevious=0, MaCurrent=0, MaPrevious=0;
   int cnt=0, total;
// первичные проверки данных
// важно удостовериться что эксперт работает на нормальном графике и
// пользователь правильно выставил внешние переменные (Lots, StopLoss,
// TakeProfit, TrailingStop)
// в нашем случае проверяем только TakeProfit
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  // на графике менее 100 баров
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return(0);  // проверяем TakeProfit
     }
// ради упрощения и ускорения кода, сохраним необходимые
// данные индикаторов во временных переменных
   MacdCurrent=iCustom(NULL,0,"AAA-O",10,14,20,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iCustom(NULL,0,"AAA-O",10,14,20,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iCustom(NULL,0,"AAA-O",10,14,20,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iCustom(NULL,0,"AAA-O",10,14,20,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,ADXperiod3,MODE_EMA,0,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,ADXperiod3,MODE_EMA,0,PRICE_CLOSE,1);
// теперь надо определиться - в каком состоянии торговый терминал?
// проверим, есть ли ранее открытые позиции или ордеры?
   if(OrdersTotal()<1) 
     {
      // нет ни одного открытого ордера
      // на всякий случай проверим, если у нас свободные деньги на счету?
      // значение 1000 взято для примера, обычно можно открыть 1 лот
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money");
         return(0);  // денег нет - выходим
        }
      // проверим, не слишком ли часто пытаемся открыться?
      // если последний раз торговали менее чем 5 минут(5*60=300 сек)
      // назад, то выходим
      // If((CurTime-LastTradeTime)<300) { Exit }
      // проверяем на возможность встать в длинную позицию (BUY)
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
         MathAbs(MacdCurrent)>(ADXperiod1*Points) && MaCurrent>MaPrevious)
        {
         OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Points,"macd sample",16384,0,Red); // исполняем
         if(GetLastError()==0)Print("Order opened : ",OrderOpenPrice());
         return(0); // выходим, так как все равно после совершения торговой операции
            // наступил 10-ти секундный таймаут на совершение торговых операций
        }
      // проверяем на возможность встать в короткую позицию (SELL)
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
         MacdCurrent>(ADXperiod1*Points) && MaCurrent<MaPrevious)
        {
         OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Points,"macd sample",16384,0,Red); // исполняем
         if(GetLastError()==0)Print("Order opened : ",OrderOpenPrice());
         return(0); // выходим
        };
      // здесь мы завершили проверку на возможность открытия новых позиций.
      // новые позиции открыты не были и просто выходим по Exit, так как
      // все равно анализировать нечего
      return(0);
     };
   // переходим к важной части эксперта - контролю открытых позиций
   // 'важно правильно войти в рынок, но выйти - еще важнее...'
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL 
         OrderSymbol()==Symbol())    // инструмент совпадает?
        {
         if(OrderType()==OP_BUY)   // открыта длинная позиция
           {
            // проверим, может уже пора закрываться?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(ADXperiod3*Points))
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию
                 return(0); // выходим
                };
            // проверим - может можно/нужно уже трейлинг стоп ставить?
            if(TrailingStop>0)  // пользователь выставил в настройках трейлингстоп
              {                 // значит мы идем его проверять
               if(Bid-OrderOpenPrice()>Points*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Points*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Points*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
         else // иначе это короткая позиция
           {
            // проверим, может уже пора закрываться?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(ADXperiod3*Points))
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрываем позицию
               return(0); // выходим
              }
            // проверим - может можно/нужно уже трейлинг стоп ставить?
            if(TrailingStop>0)  // пользователь выставил в настройках трейлингстоп
              {                 // значит мы идем его проверять
               if((OrderOpenPrice()-Ask)>(Points*TrailingStop))
                 {
                  if(OrderStopLoss()==0.0 || 
                     OrderStopLoss()>(Ask+Points*TrailingStop))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Points*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
// the end.
 
Сергей Дыбленко:

Nun, sehen Sie... Ich habe den Expert Advisor Sample MacDi geändert und er öffnet den Auftrag nicht!

Ich habe nichts angerührt, sondern meinen eigenen Indikator verschrieben!

jeder Indikator hat seine eigene Logik des Schreibens

hier sind alle Indikatoren und ihre Beispielehttps://www.mql5.com/ru/docs/indicators es ist wahr, es ist für mt5 aber ich denke, es sollte das gleiche für mt4 sein

Документация по MQL5: Технические индикаторы
Документация по MQL5: Технические индикаторы
  • www.mql5.com
Все функции типа iMA, iAC, iMACD, iIchimoku и т.п., создают в глобальном кеше клиентского терминала копию соответствующего технического индикатора. Если копия индикатора с этими параметрами уже существует, то новая копия не создается, а увеличивается счетчик ссылок на данную копию. Эти функции возвращают хэндл соответствующей копии индикатора...
 
Alexsandr San:

jeder Indikator hat seine eigene Logik des Schreibens

hier sind alle Indikatoren und ihre Beispielehttps://www.mql5.com/ru/docs/indicators es ist wahr für mt5, aber ich denke, es sollte das gleiche für mt4 sein

Gibt es einen großen Unterschied zwischen 4 und 5?

 
https://www.mql5.com/ru/docs/migration heißt es, dass Sie von 4 auf 5 umkodieren können!
Документация по MQL5: Переход с MQL4
Документация по MQL5: Переход с MQL4
  • www.mql5.com
Язык MQL5 является развитием своего предшественника – языка MQL4, на котором написано огромное множество индикаторов, скриптов и экспертов. Несмотря на то, что новый язык программирования максимально совместим с языком предыдущего поколения, все же есть ряд отличий между этими языками. И при переносе программ эти отличия нужно знать. В этом...
 
Сергей Дыбленко:

Gibt es einen großen Unterschied zwischen 4 und 5?

es gibt einen Unterschied - aber wenn man mt5 kennt, ist es einfacher zu erraten, wie man zu mt4 konvertiert

ich weiß nicht, ich arbeite mit Indikatoren - ich mache Vorhersagen, ich gebe Befehle und ich setze Ziele im Geld. ich würde sagen, dass Sie mehr verdienen, als Sie einen Expert Advisor auf einer Maschine laufen lassen würden.