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

 
MakarFX , denedim - değişiklik yok, ayrıca sadece alım için açılıyor ve satış tamamen yok sayılıyor ...
 
artem artem # :
MakarFX , denedim - değişiklik yok, ayrıca sadece alım için açılıyor ve satış tamamen yok sayılıyor ...
Dolayısıyla, boolleri değiştirmek için hiçbir koşul olmadığı sonucu
 
O halde şartların oluşması için ne eklenmesi gerekiyor?
 
artem artem # :
O halde şartların oluşması için ne eklenmesi gerekiyor?

Mantığını anlat...

Birincisi açık: bir sinyal var ve emir yok, açıyoruz...

ve sonra siparişleri hangi koşullar altında açacağımı veya kapatacağımı anlamıyorum

 
artem artem # :
O halde şartların oluşması için ne eklenmesi gerekiyor?

Bunu dene

 //+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
{
   StopLevel = MarketInfo( Symbol (), MODE_STOPLEVEL); 
   
   // Определение направления пересечения мувингов
   if (Init) InitMetod(); 
   
   // Трейлинг стоп открытых позиций
   if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
   
   // Ожидание нового бара на графике
   if (timeprev == Time[ 0 ]) return ;
   timeprev = Time[ 0 ];
   
   // Открытие ордера по методу Пуриа
   if (CheckForOpen()== 0 ) // Если сигнал для покупок 
     {
       if ( OrderSend ( Symbol (),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss* Point ,Ask+TakeProfit* Point , "" ,MagicNumber, 0 ,Blue))
         { Order= false ; OrderBuy= true ; OrderSell= false ; Print ( "BUY OK" ); } 
     } 
   if (CheckForOpen()== 1 ) // Если сигнал для продаж 
     {
       if ( OrderSend ( Symbol (),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss* Point ,Bid-TakeProfit* Point , "" ,MagicNumber, 0 ,Red))
         { Order= false ; OrderBuy= false ; OrderSell= true ; Print ( "SELL OK" );} 
     }
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
int CheckForOpen() // Открытие ордера по методу Пуриа
  {
   double malw,mas1,mas2,macd;
   int     res=- 1 , buy= 0 , sell= 0 ;
   // Считывание параметров индикаторов 3 свечи (4ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 3 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 3 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 3 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 3 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 2 свечи (3ей)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 2 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 2 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 2 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 2 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 1 свечи (2ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 1 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 1 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 1 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 1 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 0 свечи (1ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 0 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 0 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 0 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   
   if (buy == 4 && OrderSell) res= 0 ;
   if (sell== 4 && OrderBuy)   res= 1 ;
   return (res);
  }
//+------------------------------------------------------------------+
 

Tamam, şimdi her şeyi sırayla anlatacağım, spesifik olmaya çalışacağım ve su dökmemeye çalışacağım ...

Trend ticaret stratejisi "Puria Yöntemi" temel alınır. Üç hareketli ortalamanın kesişimine ve MACD çubuğunun açılmasına dayanır. (75) ve (85) noktalı iki yavaş, Düşük'e Doğrusal Ağırlıklı yöntemi uygulayın. Noktalı hızlı ortalama (5), Üstel yöntem, Kapat için geçerlidir. 15/26/1 parametreleriyle MACD göstergesi . Giriş noktası, hızlı hareket eden ortalama iki yavaş olanı geçtiğinde ve MACD çubuğu hızlı olanla karşılık gelen bölgede açıldığında oluşur ( hızlı ve MACD çubuğu aynı bölgede olmalıdır ):

  • SATIN AL sinyali - MA(5) kesişti ve hem MA(75) hem de MA(85) üzerinde, MACD'nin pozitif alanında açık bir çubuk var.
  • SAT sinyali - MA(5) kesişti ve hem MA(75) hem de MA(85) altında, MACD ise negatif alanda açık bir bara sahip.

EA, sabit bir kâr ve bir durdurma kaybı koyar. Kar ve durdurmanın boyutu, ilk parametrelerde ayarlanır. Emirleri sadece kar al veya zararı durdura ulaşıldığında kapatır.

Orijinal Puria danışmanlarında olan buydu. Ayrıca, en son sürümde, aynı zamanda bir takip eden durdurma ve belirli saatlerde işlem yapma seçeneği de vardır. İşlevler faydalıdır, ancak şu anda beni pek ilgilendirmiyorlar.

Şimdi aslında ne gibi eklemeler yaptım/yapmak istiyorum:

1. Öyle yap   bir anlaşma açmak   ve   tüm gösterge koşullarına uygunluğun kontrol edilmesi   (hızlı (5) iki yavaş (75) (85) çubuğun çaprazlanması ve MACD çubuğunun hızlı (5) ile aynı yönde açılması ) yapıldı.   sadece yeni bir mumun açılış fiyatına   (her biri 30 dakikalık mumun ilk işareti) . Zaten onunla uğraştı;
  1. "Sıfırlama" göstergeleri için koşullar oluşturun . Örneğin,   hızlı hareket eden ortalama (5) için: yavaş olanlardan daha yüksekse, bu bir satın alma sinyalidir. Bundan sonra düşerse ve yavaş hareket eden ortalamalardan birine dokunursa veya (75) ve (85) arasındaysa   - daha sonra hızlı hareket eden ortalamadan gelen sinyal, olduğu gibi,   "sıfırlandı" ve böyle kalacak   "sıfır" konumuna dokunana kadar veya yavaş arasında kalana kadar . Bundan sonra ise,   hızlı, her iki yavaş olanı da tek yönde keser   (yavaş olanların dokunuşundan önce geldiği yöne döndüyse dahil) - o zaman bu, bu göstergeden bir sinyal olacaktır .   MACD ile durum benzer   - bir tek   "sıfır" MACD=0 olacaktır   (mum üzerinde ise 1. MACD, örneğin değerle açıldı   0.0043 ve mum üzerinde 2. değeri ile   -0.0010 , öyleydi   "sıfır"   ve 2. mumdaki MACD yeni bir sinyal yayınladı). Ancak bir nokta var:   hızlı (5) ve MACD, olduğu gibi "eşit düzeyde" olmalıdır   - (5) yavaş olanlara göre pozisyonunu değiştirmiyorsa ve bu sırada MACD karşı bölgedeki son mumda (giriş yok) ve hızlı mumla aynı bölgedeki bir sonraki mumda açıldıysa, o zaman tüm koşullar birleşti ve arama emrine bir giriş olmalı.   Tüm bunların sadece mumların açılış fiyatlarında olması gerektiğine dikkatinizi çekiyorum - sadece bu kene için ;
  1. Aslında sonuncusu. Göstergeler için tüm koşulların çakışmasından sonra (mumların açılış fiyatlarında),   EA art arda 4 mum açılış fiyatı bekledi :

    1. 1. mumun açılış fiyatı - (5) (75) ve (85) üstü + MACD çubuğu 0'ın üzerinde açıldı - 4 teyitten 1'i var ;
    2. 2. mumun açılış fiyatı - (5) (75) ve (85) + 0 üzerinde açılan MACD çubuğu -   4 onaydan 2'si ;
    3. 3. mumun açılış fiyatı - (5) (75) ve (85) + 0'ın üzerinde açılan MACD çubuğu -   4 onaydan 3'ü ;
    4. 4. mumun açık fiyatı - (5) (75) ve (85) + 0'ın üzerinde MACD çubuğu açıldı -   4 onaydan 4'ü   -   Aynı mumu satın almak için bir anlaşma açmak (4.).
Siparişler için benzer bir durum   sat , sadece göstergeler diğer yönde açılmalıdır. Ve önemli bir nokta var - diyelim ki, 1. mumdan 4. muma kadar herhangi bir aşamada,   göstergeler konumlarını değiştirecek   (örneğin, 3. açılış mumunda, MACD çubuğu ya 0'ın altında ya da = 0'ın altında açılacaktır - o zaman her şey sıfırlanır çünkü. sinyaller arka arkaya 4 mum açma testini geçemedi .


Bunun gibi bir şey, net olmayan bir şey varsa ve sorularınız varsa - lütfen sorun

 
artem artem # :

Tamam, şimdi her şeyi sırayla anlatacağım, spesifik olmaya çalışacağım ve su dökmemeye çalışacağım ...


  1. "Sıfırlama" göstergeleri için koşullar oluşturun .

Bu sıfırlanma

   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ; }
   if (malw<mas1&&malw<mas2&&macd< 0 ) { buy= 0 ; sell+= 1 ;}

Belki seni doğru anlamıyorum...

ekran görüntüsü almayı dene

 
Bir şey net değilse bir ekran görüntüsü ekledim - sadece sorun
Dosyalar:
 
artem artem # :
Bir şey net değilse bir ekran görüntüsü ekledim - sadece sorun
anlıyorum, düşünüyorum
 
artem artem # :
Bir şey net değilse, bir ekran görüntüsü ekledim - sadece sorun

ve bunu bir deneyin - oralarda açılacak mı?

 //+------------------------------------------------------------------+
//|                                                  artem artem.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
//---
#define MagicNumber   122122
//---
#include <stdlib.mqh> // Стандартная библиотека
//---
input string s0 = "Баланс" ;             // 1
input string Template       = "ADX" ;   // Имя шаблона(without '.tpl')
input double TargetProfit   = 1000000 ; // Баланс + Прибыль(прибавить к балансу)
input double TargetLoss     = 0 ;       // Баланс - Убыток(отнять от баланса)
input string s1 = "Размер лота" ;       // 2
input double Lot            = 0.01 ;     // размер лота 0 - авт.расчет
input string s2 = "TP SL" ;             // 3
input double InpTProfit     = 1000 ;     // Exchange TP
input double InpStopLoss    = 1000000 ; // Exchange SL
input string s3 = "Индикатор" ;         // 4
input int     MovingPeriodLw = 13 ;       // MovingPeriodLw
input int     MovingPeriodS1 = 89 ;       // MovingPeriodS1
input int     MovingPeriodS2 = 144 ;     // MovingPeriodS2
input string s4 = "Day & Hour" ;         // 5
input int     HrStart        = 0 ;       // время начала торговли
input int     HrEnd          = 23 ;       // время окончания торговли
//+------------------------------------------------------------------+
int     Monday         = 1 ;       // Понедельник 1 вкд. 0 выкл.
int     Tuesday        = 1 ;       // Вторник
int     Wednesday      = 1 ;       // Среда
int     Thursday       = 1 ;       // Четверг
int     Friday         = 1 ;       // Пятница
//+------------------------------------------------------------------+
uint SLEEPTIME= 1 ;
double Price[ 2 ];
datetime timeprev= 0 ;
ENUM_TIMEFRAMES TimeFrame= PERIOD_CURRENT ;
bool OrderBuy= false ,OrderSell= false ,Order= false ,Init= true ,ClOp= true ;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- Закрыть Общий профит или профит на паре
   if (ProfitTarget())
     {
       return ;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
// Определение направления пересечения мувингов
   if (Init)
      InitMetod();
// Ожидание нового бара на графике
   if (timeprev == Time[ 0 ])
       return ;
   timeprev = Time[ 0 ];
// Открытие ордера по методу Пуриа
   CheckForOpen();
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen() // Открытие ордера по методу Пуриа
  {
   double malw,mas1,mas2,macd;
   int     res;
// Считывание параметров индикаторов
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 0 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 0 );
   macd= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 );
// Проверяем положение мувмнгов
   if (malw>mas1 && malw>mas2  && OrderSell)
     {
      OrderBuy= true ;
      OrderSell= false ;
      Order= true ;
     }
   if (malw<mas1 && malw<mas2  && OrderBuy)
     {
      OrderBuy= false ;
      OrderSell= true ;
      Order= true ;
     }
// Открываем ордер Buy
   if (macd> 0 && OrderBuy && Order)
     {
      res= OrderSend ( Symbol (),OP_BUY,Lots(),Ask, 3 , 0 , 0 , "" ,MagicNumber, 0 ,Blue);
      Order= false ;
       return ;
     }
// Открываем ордер Sell
   if (macd< 0 && OrderSell && Order)
     {
      res= OrderSend ( Symbol (),OP_SELL,Lots(),Bid, 3 , 0 , 0 , "" ,MagicNumber, 0 ,Red);
      Order= false ;
       return ;
     }
  }
//+------------------------------------------------------------------+
//| Init metod Puria function                                        |
//+------------------------------------------------------------------+
void InitMetod()   // Опредеоение начального пересечения мувингов
  {
   double malw,mas1,mas2;
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 0 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 0 );
   if ((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2))
     {
      Init= false ;
      OrderBuy= true ;
      OrderSell= true ;
     }
   return ;
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lots()   // Расчет объема лота
  {
   double Lots;
   if (Lot > 0 )
       return (Lot);
   Lots=AccountFreeMargin()/ 5000 ;
   Lots= MathMin ( 15 , MathMax ( 0.01 ,Lots));
   if (Lots< 0.1 )
      Lots= NormalizeDouble (Lots, 2 );
   else
     {
       if (Lots< 1 )
         Lots= NormalizeDouble (Lots, 1 );
       else
         Lots= NormalizeDouble (Lots, 0 );
     }
   return (Lots);
  }
//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay( int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false ;
   switch (DayOfWeek())
     {
       case 1 : // Monday
         if (Monday == 1 )
            dtrade = true ;
         break ;
       case 2 : // Tuesday
         if (Tuesday == 1 )
            dtrade = true ;
         break ;
       case 3 : // Wednesday
         if (Wednesday == 1 )
            dtrade = true ;
         break ;
       case 4 : // Thursday
         if (Thursday == 1 )
            dtrade = true ;
         break ;
       case 5 : // Friday
         if (Friday == 1 )
            dtrade = true ;
         break ;
       default : //
         dtrade = false ;
         break ;
     }
   if (dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true ;
   return dtrade;
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool ProfitTarget( void )
  {
   bool res= false ;
   if ( AccountInfoDouble ( ACCOUNT_EQUITY )<=TargetLoss ||
       AccountInfoDouble ( ACCOUNT_EQUITY )>=TargetProfit)
     {
      CloseAllOrders();
       Sleep (SLEEPTIME* 1000 );
      CloseAllOrders();
       ExpertRemove ();
      DeleteChart();
       PlaySound ( "expert.wav" );
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool ProfitOnTick( void )
  {
   bool res= false ;
   double PROFIT_BUY= 0.00 ;
   double PROFIT_SELL= 0.00 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // returns the number of open positions
     {
       if ( OrderSelect (i,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         if (OrderSymbol()== Symbol () && OrderType()==OP_BUY)
           {
            PROFIT_BUY=PROFIT_BUY+ NormalizeDouble (OrderProfit(), 2 );
           }
         if (OrderSymbol()== Symbol () && OrderType()==OP_SELL)
           {
            PROFIT_SELL=PROFIT_SELL+ NormalizeDouble (OrderProfit(), 2 );
           }
        }
     }
   int Close_ticketb= 0 ;
   int totalb= OrdersTotal ();
   int b = 0 ;
   for (b = totalb; b >= 0 ; b--)
     {
       if ( OrderSelect (b,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         //OrderSelect(i,SELECT_BY_POS);
         if (OrderSymbol()== Symbol () && OrderType()==OP_BUY)
           {
             if (PROFIT_BUY<-InpStopLoss || PROFIT_BUY>=InpTProfit)
              {
               Close_ticketb = OrderClose(OrderTicket(),OrderLots(),MarketInfo( Symbol (),MODE_BID), 5 );
               PlaySound ( "ok.wav" );
              }
           }
        }
      res= true ;
     }
   int Close_tickets= 0 ;
   int totals= OrdersTotal ();
   int s = 0 ;
   for (s = totals; s >= 0 ; s--)
     {
       if ( OrderSelect (s,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         if (OrderSymbol()== Symbol () && OrderType()==OP_SELL)
           {
             if (PROFIT_SELL<-InpStopLoss || PROFIT_SELL>=InpTProfit)
              {
               Close_tickets = OrderClose(OrderTicket(),OrderLots(),MarketInfo( Symbol (),MODE_ASK), 5 );
               PlaySound ( "ok.wav" );
              }
           }
        }
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void CloseAllOrders( void )
  {
   int iOrders= OrdersTotal ()- 1 , i;
   if (ClOp)
     {
       for (i=iOrders; i>= 0 ; i--)
        {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL) && GetMarketInfo() &&
            !OrderClose(OrderTicket(),OrderLots(),Price[ 1 -OrderType()], 0 ))
             Print (OrderError());
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
           {
             if (OrderDelete(OrderTicket()))
               Print (OrderError());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Function..: OrderError                                           |
//+------------------------------------------------------------------+
string OrderError( void )
  {
   int iError= GetLastError ();
   return ( StringConcatenate ( "Order:" ,OrderTicket(), " GetLastError()=" ,iError, " " ,ErrorDescription(iError)));
  }
//+------------------------------------------------------------------+
//| Function..: GetMarketInfo                                        |
//+------------------------------------------------------------------+
bool GetMarketInfo( void )
  {
   RefreshRates();
   Price[ 0 ]=MarketInfo(OrderSymbol(),MODE_ASK);
   Price[ 1 ]=MarketInfo(OrderSymbol(),MODE_BID);
   double dPoint=MarketInfo(OrderSymbol(),MODE_POINT);
   if (dPoint== 0 )
       return ( false );
   return (Price[ 0 ]> 0.0 && Price[ 1 ]> 0.0 );
  }
//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void DeleteChart( void )
  {
   long currChart,prevChart= ChartFirst ();
   int i= 0 ,limit= 100 ;
   bool errTemplate;
   while (i<limit)
     {
      currChart= ChartNext (prevChart);
       if (TimeFrame!= PERIOD_CURRENT )
        {
         ChartSetSymbolPeriod (prevChart, ChartSymbol (prevChart),TimeFrame);
        }
      errTemplate= ChartApplyTemplate (prevChart,Template+ ".tpl" );
       if (!errTemplate)
        {
         Print ( "Error " , ChartSymbol (prevChart), "-> " , GetLastError ());
        }
       if (currChart< 0 )
         break ;
       Print (i, ChartSymbol (currChart), " ID =" ,currChart);
      prevChart=currChart;
      i++;
     }
  }
//+------------------------------------------------------------------+