MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 276

 
Vladimir Pastushak :

ZeroMemory(...), string türünde bir diziyi NULL olarak başlatacak


Güzel gün. Soru sıradaki. Bir Uzman Danışman yazdım , sonuna bir durak ekledim, derledim.......... çalışmıyor :)))))). Bilgisayarı yeniden başlattı, kaynağı düzeltti, başlattı. Giriş parametreleri üzerinden yapılandırmaya başladım, tekrar çalışmıyor veya daha doğrusu bir kez değişti ve hepsi bu .......... Belki Windows buggy veya bir yeri tekrar batırdım. Kaynak kodunu ekliyorum.

//+------------------------------------------------------------------+
//|                                                        test8.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//-------------------------------------------------------------------
extern double lots            = 0.1;
extern int    TakeProfit      = 100;
extern int    StopLoss        = 50;
extern int    Magic           = 777; 
extern int    Slippage        = 3;

//-------------------------------------------------------------------
extern string TMA             = "Параметры индикатора TMA";
extern string TimeFrame       = "current time frame";
extern int    HalfLength      = 56; 
extern int    Price           = PRICE_CLOSE;
extern double ATRMultiplier   = 2.0;
extern int    ATRPeriod       = 100;
extern bool   Interpolate     = true;
extern int    TrailingStop    = 50; 
extern int    TrailingStep    = 20;
int    timeprev        = 0;
//-------------------------------------------------------------------
double PriceHigh, PriceLow, SL ,TP;
int ticket;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if (Digits == 3 || Digits == 5);
   {
       TakeProfit   *=10;
       Slippage     *=10;
       TrailingStop *=10;
       TrailingStep *=10;
     
       
   }  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    if (timeprev == Time [0])return;
         timeprev = Time [0];
  
    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);  
        if (ticket > 0)
        {
            TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
            SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
            if (OrderSelect(ticket, SELECT_BY_TICKET)) 
                if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0));
                    Print("Ошибк амодификации ордера на продажу!");
        } else Print("Ошибка открытия ордера на продаду!"); 
    }
  

    if (CountBuy() == 0 && Ask <= PriceLow)
    
      {
         ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);  
         if (ticket > 0)
           { 
                SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
                TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
                if (OrderSelect(ticket, SELECT_BY_TICKET)) 
                if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0));
                  Print ("Ошибка модификации ордера на покупку!");
           }      else Print("Ошибка открытия ордера на покупкку!");
      }
     
     Trailing();    
    }
//+------------------------------------------------------------------+
void Trailing()
{
    for (int i=OrdersTotal() -1; i>=0; i--)
    {
      if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if (OrderType() == OP_BUY)
            {
               if (Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0)
               {
                   if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0)
                   {
                      if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid-TrailingStop*Point, Digits), 0, 0))
                         Print ("Ошибка модификации ордера на покупку!");
                   } 
               }
            }
            
            if (OrderType() == OP_SELL)
            {
                if (OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0)
                {
                    if (OrderStopLoss() > Ask + (TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0)
                    {
                        if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask + TrailingStop*Point, Digits), 0, 0))
                             Print ("Ошибка модификации ордера на родажу!"); 
                    }
                    
                }
            }
         
         }
      }
    }
}
  
//+------------------------------------------------------------------+


int CountSell() 
  {
    int count = 0;
    for (int trade = OrdersTotal()-1; trade>=0; trade--)
    {
       if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
       {
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
             count++;
       }   
    }
    return(count);
  }
//-----------------------------------------------------------------------------------------------  
  int CountBuy() 
  {
    int count = 0;

    for (int trade = OrdersTotal()-1; trade>=0; trade--)
    {
       if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
       {
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
             count++;
       }   
    }
    return(count);
  }
//-----------------------------------------------------------------------------------------------  
  
       
       
  
 

Güzel gün. Soru sıradaki. Bir Uzman Danışman yazdım , sonuna bir durak ekledim, derledim.......... çalışmıyor :)))))). Daha doğrusu takip çalışıyor ama daha önce kaydedilen kar çalışmıyor, sebebi nedir?

Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и...
 
danil77783 :

Güzel gün. Soru sıradaki. Bir Uzman Danışman yazdım , sonuna bir durak ekledim, derledim.......... çalışmıyor :)))))). Bilgisayarı yeniden başlattı, kaynağı düzeltti, başlattı. Giriş parametreleri üzerinden yapılandırmaya başladım, tekrar çalışmıyor veya daha doğrusu bir kez değişti ve hepsi bu .......... Belki Windows buggy veya bir yeri tekrar batırdım. Kaynak kodunu ekliyorum.


 if (timeprev == Time [0])
{
         timeprev = Time [0];
return;

}

 
Vladimir Pastushak :


taikprofit hala ortaya çıkmıyor .... Tekrar bakın lütfen.

 
danil77783 :

taikprofit hala ortaya çıkmıyor .... Tekrar bakın lütfen.


Takip fonksiyonundaki tüm siparişler için 0 alır ve açarken doğru olanı ayarlarsınız.

Mantığı satır satır okuyun,

bir sipariş açtı durdur ve al

takip eden durdurma başlat 0'a ayarlandı

sondaki 0'ı OrderTakeProfit() ile değiştirin

 

Şimdi bir stop loss koymuyor

 
danil77783 :

Şimdi bir stop loss koymuyor


Yeni kodu göster

 
Vladimir Pastushak :

Yeni kodu göster





 //+------------------------------------------------------------------+
//|                                                        test8.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//-------------------------------------------------------------------
extern double lots            = 0.1 ;
extern int     TakeProfit      = 50 ;
extern int     StopLoss        = 50 ;
extern int     Magic           = 777 ; 
extern int     Slippage        = 3 ;

//-------------------------------------------------------------------
extern string TMA             = "Параметры индикатора TMA" ;
extern string TimeFrame       = "current time frame" ;
extern int     HalfLength      = 56 ; 
extern int     Price           = PRICE_CLOSE ;
extern double ATRMultiplier   = 2.0 ;
extern int     ATRPeriod       = 100 ;
extern bool    Interpolate     = true ;
extern int     TrailingStop    = 50 ; 
extern int     TrailingStep    = 20 ;
int     timeprev        = 0 ;
//-------------------------------------------------------------------
double PriceHigh, PriceLow, SL ,TP;
int ticket;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if ( Digits == 3 || Digits == 5 );
   {
       TakeProfit   *= 10 ;
       Slippage     *= 10 ;
       TrailingStop *= 10 ;
       TrailingStep *= 10 ;
     
       
   }  
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
     if (timeprev == Time [ 0 ])
    {
         timeprev = Time [ 0 ];
         return ;
  }
    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);  
         if (ticket > 0 )
        {
            TP = NormalizeDouble ( Bid - TakeProfit* Point , Digits );
           
             if ( OrderSelect (ticket, SELECT_BY_TICKET )) 
                 if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ));
                     Print ( "Ошибк амодификации ордера на продажу!" );
        } else Print ( "Ошибка открытия ордера на продаду!" ); 
    }
  

     if (CountBuy() == 0 && Ask <= PriceLow)
    
      {
         ticket = OrderSend ( Symbol (), OP_BUY , lots, Ask , Slippage, 0 , 0 , "TMA robot" , Magic, 0 , Blue);  
         if (ticket > 0 )
           { 
               
                TP = NormalizeDouble ( Ask + TakeProfit* Point , Digits );
                 if ( OrderSelect (ticket, SELECT_BY_TICKET )) 
                 if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ));
                   Print ( "Ошибка модификации ордера на покупку!" );
           }       else Print ( "Ошибка открытия ордера на покупкку!" );
      }
     
     Trailing();    
    }
//+------------------------------------------------------------------+
void Trailing()
{
     for ( int i= OrdersTotal () - 1 ; i>= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic)
         {
             if ( OrderType () == OP_BUY )
            {
               if ( Bid - OrderOpenPrice () > TrailingStop* Point || OrderStopLoss () == 0 )
               {
                   if ( OrderStopLoss () < Bid -(TrailingStop+TrailingStep)* Point || OrderStopLoss () == OrderTakeProfit () )
                   {
                       if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Bid -TrailingStop* Point , Digits ), 0 , 0 ))
                         Print ( "Ошибка модификации ордера на покупку!" );
                   } 
               }
            }
            
             if ( OrderType () == OP_SELL )
            {
                 if ( OrderOpenPrice () - Ask > TrailingStop* Point || OrderStopLoss () == 0 )
                {
                     if ( OrderStopLoss () > Ask + (TrailingStop+TrailingStep)* Point || OrderStopLoss () == OrderTakeProfit ( ) )
                    {
                         if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Ask + TrailingStop* Point , Digits ), 0 , 0 ))
                             Print ( "Ошибка модификации ордера на родажу!" ); 
                    }
                    
                }
            }
         
         }
      }
    }
}
  
//+------------------------------------------------------------------+


int CountSell() 
  {
     int count = 0 ;
     for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade--)
    {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
       {
           if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic && OrderType () == OP_SELL )
             count++;
       }   
    }
     return (count);
  }
//-----------------------------------------------------------------------------------------------  
   int CountBuy() 
  {
     int count = 0 ;

     for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade--)
    {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
       {
           if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic && OrderType () == OP_BUY )
             count++;
       }   
    }
     return (count);
  }
//-----------------------------------------------------------------------------------------------  
  
       
       
  
 
danil77783 :





Sondaki 0 almak yerine bahse girersen sana açıkça yazdım

Bu seçeneğe göz atın

//+------------------------------------------------------------------+
//|                                                        test8.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//-------------------------------------------------------------------
extern double lots            = 0.1 ;
extern int     TakeProfit      = 100 ;
extern int     StopLoss        = 50 ;
extern int     Magic           = 777 ; 
extern int     Slippage        = 3 ;

//-------------------------------------------------------------------
extern string TMA             = "Параметры индикатора TMA" ;
extern string TimeFrame       = "current time frame" ;
extern int     HalfLength      = 56 ; 
extern int     Price           = PRICE_CLOSE ;
extern double ATRMultiplier   = 2.0 ;
extern int     ATRPeriod       = 100 ;
extern bool    Interpolate     = true ;
extern int     TrailingStop    = 50 ; 
extern int     TrailingStep    = 20 ;
int     timeprev        = 0 ;
//-------------------------------------------------------------------
double PriceHigh, PriceLow, SL ,TP;
int ticket;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if ( Digits == 3 || Digits == 5 );
   {
       TakeProfit   *= 10 ;
       Slippage     *= 10 ;
       TrailingStop *= 10 ;
       TrailingStep *= 10 ;
     
       
   }  
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
     if (timeprev == Time [ 0 ]) return ;
         timeprev = Time [ 0 ];
  
    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);  
         if (ticket > 0 )
        {
            TP = NormalizeDouble ( Bid - TakeProfit* Point , Digits );
            SL = NormalizeDouble ( Bid + StopLoss* Point , Digits );
             if ( OrderSelect (ticket, SELECT_BY_TICKET )) 
                 if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ));
                     Print ( "Ошибк амодификации ордера на продажу!" );
        } else Print ( "Ошибка открытия ордера на продаду!" ); 
    }
  

     if (CountBuy() == 0 && Ask <= PriceLow)
    
      {
         ticket = OrderSend ( Symbol (), OP_BUY , lots, Ask , Slippage, 0 , 0 , "TMA robot" , Magic, 0 , Blue);  
         if (ticket > 0 )
           { 
                SL = NormalizeDouble ( Ask - StopLoss* Point , Digits );
                TP = NormalizeDouble ( Ask + TakeProfit* Point , Digits );
                 if ( OrderSelect (ticket, SELECT_BY_TICKET )) 
                 if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ));
                   Print ( "Ошибка модификации ордера на покупку!" );
           }       else Print ( "Ошибка открытия ордера на покупкку!" );
      }
     
     Trailing();    
    }
//+------------------------------------------------------------------+
void Trailing()
{
     for ( int i= OrdersTotal () - 1 ; i>= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic)
         {
             if ( OrderType () == OP_BUY )
            {
               if ( Bid - OrderOpenPrice () > TrailingStop* Point || OrderStopLoss () == 0 )
               {
                   if ( OrderStopLoss () < Bid -(TrailingStop+TrailingStep)* Point || OrderStopLoss () == 0 )
                   {
                       if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Bid -TrailingStop* Point , Digits ), OrderTakeProfit () , 0 ))  //          --------------------------
                         Print ( "Ошибка модификации ордера на покупку!" );
                   } 
               }
            }
            
             if ( OrderType () == OP_SELL )
            {
                 if ( OrderOpenPrice () - Ask > TrailingStop* Point || OrderStopLoss () == 0 )
                {
                     if ( OrderStopLoss () > Ask + (TrailingStop+TrailingStep)* Point || OrderStopLoss () == 0 )
                    {
                         if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Ask + TrailingStop* Point , Digits ), OrderTakeProfit () , 0 ))   //          --------------------------
                             Print ( "Ошибка модификации ордера на родажу!" ); 
                    }
                    
                }
            }
         
         }
      }
    }
}
  
//+------------------------------------------------------------------+


int CountSell() 
  {
     int count = 0 ;
     for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade--)
    {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
       {
           if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic && OrderType () == OP_SELL )
             count++;
       }   
    }
     return (count);
  }
//-----------------------------------------------------------------------------------------------  
   int CountBuy() 
  {
     int count = 0 ;

     for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade--)
    {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
       {
           if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic && OrderType () == OP_BUY )
             count++;
       }   
    }
     return (count);
  }
//-----------------------------------------------------------------------------------------------  
 
Merhaba.
Lütfen ilk çubuktaki MA fiyatını önceki dört çubuktaki MA fiyatlarıyla karşılaştırmama yardım edin. Fiyat arttıysa ve fark N'den büyükse, arabelleği doldurun. böyle denemek
    
    MA_1  = iMA ( NULL , 0 , ma_period, 0 , ma_method,applied_price, i+ 1 );
    MA_2  = iMA ( NULL , 0 , ma_period, 0 , ma_method,applied_price, i+ 2 );
    MA_3  = iMA ( NULL , 0 , ma_period, 0 , ma_method,applied_price, i+ 3 );
     if (MA_1>MA_2)
    {
    double N_=0.005;
    BarCount= 4 ;
    BUL=false;
   for ( int il=i+1;il<=BarCount;il++)
     {
       if ( iMA ( NULL , 0 , ma_period, 0 , ma_method,applied_price, i)- iMA ( NULL , 0 , ma_period, 0 , ma_method,applied_price, i+il)>=N_ )
      {BUL= true ; break ;}
     }
     RefreshRates ();
       if (BUL)
       {
      BufferUP[i+ 1 ]=low[i+ 1 ]-distance*MyPoint;
      BUL= false ;
    
       }
       }