Biraz ince ayar gerekiyor - sayfa 12

 
o zaman okumak uzun zaman alacak ......... kesinlikle birkaç yıl!
 
Сергей Дыбленко :
o zaman okumak uzun zaman alacak ......... kesinlikle birkaç yıl!

peki 2013 ten beri öğrenmeye çalışıyorum ve şimdiye kadar sadece dürterek öğrenmeye çalışıyorum, tamamen kendim için kimya ve test yapıyorum, aklıma getiriyorum, sanırım fazladan çok şey var ve belki de yolu değil olmalı

- ama planlananın işe yarayıp yaramadığını kontrol ediyorum, o zaman orada olsun, asıl şey çalışıyor.

 
Сергей Дыбленко :
o zaman okumak uzun zaman alacak ......... kesinlikle birkaç yıl!

sadece bir uzmandan ne istediğinizi anlamalısınız - uzmanlardaki komut dosyalarındaki tüm işlevler kod tabanındadır

 
Ben de kendim için az çok doğru bir hindi arıyorum ve bunun için bir danışman yapıyorum.....
 
Сергей Дыбленко :
Ben de kendim için az çok doğru bir hindi arıyorum ve bunun için bir danışman yapıyorum.....

Her şeyi şekillendirdim, önce dikkatlice okudum, tüm sayfaları çevirdim ve hiçbir şey anlamadım, sonra uzmanları kırmaya devam ettim - tıpkı şimdi olduğu gibi.

ve terminaldeki uzmanların nasıl düzenlendiğini ve eylemlerini yavaş yavaş anladım.

 

iyi bak .. Örnek MACDI danışmanını yeniden düzenledim ve sipariş açmıyor!

Şey, hiçbir şeye dokunmadım, ama akım hindimi reçete etti!

 //+------------------------------------------------------------------+
//|                                                  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.
 
Сергей Дыбленко :

iyi bak .. Örnek MACDI danışmanını yeniden düzenledim ve sipariş açmıyor!

Şey, hiçbir şeye dokunmadım, ama akım hindimi reçete etti!

her göstergenin kendi yazma mantığı vardır

işte onlar için tüm göstergeler ve örnekler https://www.mql5.com/ru/docs/indicators bu mt5 için olsa da, muhtemelen, mt4 için belgeler aramakla aynı olmalıdır

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

her göstergenin kendi yazma mantığı vardır

işte onlar için tüm göstergeler ve örnekler https://www.mql5.com/ru/docs/indicators bu mt5 için olsa da, muhtemelen, mt4 için belgeler aramakla aynı olmalıdır

Ancak 4 ile 5 arasında güçlü bir fark var mı?

 
https://www.mql5.com/ru/docs/migration burada 4'ten 5'e yeniden kodlamanın mümkün olduğunu yazıyorlar!
Документация по MQL5: Переход с MQL4
Документация по MQL5: Переход с MQL4
  • www.mql5.com
Язык MQL5 является развитием своего предшественника – языка MQL4, на котором написано огромное множество индикаторов, скриптов и экспертов. Несмотря на то, что новый язык программирования максимально совместим с языком предыдущего поколения, все же есть ряд отличий между этими языками. И при переносе программ эти отличия нужно знать. В этом...
 
Сергей Дыбленко :

Ancak 4 ile 5 arasında güçlü bir fark var mı?

bir fark var - ancak mt5'i bilmek, mt4'e nasıl dönüştürüleceğini tahmin etmek daha kolay

Bilmiyorum, göstergelerle çalışıyorum - tahmin ediyorum - ve nesneleri düzenliyorum, komutlar koyuyorum ve para olarak bir hedef belirliyorum. Bu şekilde bir uzmanı bir makineye atacağınızdan daha fazlasını kazanacağınızı söyleyeceğim.