Hatalar, hatalar, sorular - sayfa 2737

 

MT4'te göstergelerde hata ayıklarken , grafiğe geçerseniz hata ayıklayıcı sıkıca takılır.

Örneğin, standart bir CCI göstergesinde hata ayıklamanın başlangıcında yeniden üretilir.

1. Bir kesme noktası belirleyin;

2. F5'e basın;

3. Grafiğe geçin.

Sonuç, hata ayıklayıcı grafiğinin donmasıdır.

Ayrıca hata ayıklama sırasında F5'e birkaç kez basabilirsiniz - grafik kilitleniyor.

1260 oluşturun.

Hata ayıklayıcı ayarları:


 
Bu konuyla ilgili olmayan yorumlar " MQL4 MT4 MetaTrader 4 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 

Arama sonucu metnin bir kısmını kaldırır.


İşte orijinal.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MetaTrader 5 Strateji Test Cihazı: Hatalar, Hatalar, İyileştirme Önerileri

fxsaber , 2020.05.11 20:31

Test Kullanıcısının Header.passes _passed == 0 ile opt dosyaları oluşturması muhtemelen mantıklı değildir.
 
Çok nadiren grafik nesnelerle çalışıyorum , OBJ_LABLE (set OBJPROP_BGCOLOR) için arka planı boyamak gerekli hale geldi.
Görünen o ki, OBJ_LABLE türünde bir nesne için arka plan rengini ayarlamak mümkün değildir, OBJ_EDIT kullanmanız gerekir.
OBJ_EDIT kullanırken yeni bir sorun ortaya çıktı - tüm metnin nesnenin uygun boyutlarına sığması için OBJPROP_XSIZE ve OBJPROP_YSIZE boyutunu ayarlama ihtiyacı.

Soru: OBJPROP_XSIZE ve OBJPROP_YSIZE boyutları nasıl belirlenir, böylece tüm metin oraya sığar?
İki seçenek düşünüldü:
1. Bir OBJ_LABLE nesnesi oluşturun, boyutları okuyun, bir OBJ_LABLE nesnesini silin.
Boyutların okunması ancak nesnenin fiili oluşturulmasından sonra mümkün olduğundan ve nesne ChartRedraw için kuyruğa alındığında mümkün olmadığından uygun değildir.

2. TextSetFont'u ve ardından TextGetSize'ı kullanma.
Uygun değil, sonuç 1 No'lu yöntemin sonuçlarından kökten farklı olduğundan, yazı tipi boyutuna bağlı olarak farklar 2,5 - 2,9 kat.
Belki de nedeni 4K monitör ve %175 DPI.

 #define PRINT(x) ; Print ( #x, ":" , string (x))
          
void SetLabel( long achart, string name, int wnd, string text, color clr, int x, int y, int corn= 0 , int fontsize= 8 , string font= "Tahoma" )
{
   ObjectCreate (achart, name, OBJ_LABEL , wnd, 0 , 0 ); 
   ObjectSetInteger (achart, name, OBJPROP_CORNER , corn); 
   ObjectSetString (achart, name, OBJPROP_TEXT , text); ObjectSetInteger (achart, name, OBJPROP_COLOR , clr); 
   ObjectSetInteger (achart, name, OBJPROP_FONTSIZE , fontsize); ObjectSetString (achart, name, OBJPROP_FONT , font);
   ObjectSetInteger (achart, name, OBJPROP_SELECTABLE , false ); 
   ObjectSetInteger (achart, name, OBJPROP_BORDER_TYPE , 0 );
   ObjectSetInteger (achart, name, OBJPROP_XDISTANCE , x); ObjectSetInteger (achart, name, OBJPROP_YDISTANCE , y);
}

void OnStart (){     
   string obj_name = "test_obj" ;   
   string text = "AAAA::BBBB" ;
   int font_size = 7 ;
   string font_name = "Tahoma" ;
   
   SetLabel( 0 , obj_name, 0 , text, clrWhite , 100 , 100 , 0 , font_size, font_name);
   ChartRedraw ( 0 );
   Sleep ( 1000 );
   
   uint dx_fixed_0 = int ( ObjectGetInteger ( 0 , obj_name, OBJPROP_XSIZE ));
   uint dy_fixed_0 = int ( ObjectGetInteger ( 0 , obj_name, OBJPROP_YSIZE ));
   ObjectDelete ( 0 , obj_name);
   
   PRINT(dx_fixed_0);
   PRINT(dy_fixed_0);
   
   
   uint dx_fixed_1;
   uint dy_fixed_1;
   TextSetFont (font_name, -10 * font_size);
   TextGetSize (text, dx_fixed_1, dy_fixed_1);
   
   PRINT( 1.0 * dx_fixed_0 / dx_fixed_1);  	// Result: 1.0
   PRINT( 1.0 * dy_fixed_0 / dy_fixed_1);  	// Result: 1.0
}  


Çözüm için teşekkürler Geess .
TextSetFont'a geçerken yazı tipi boyutunu -10 ile çarpmanız gerekiyor.

 
Sergey Dzyublik :
Çok nadiren grafik nesnelerle çalışıyorum , OBJ_LABLE (set OBJPROP_BGCOLOR) için arka planı boyamak gerekli hale geldi.
Görünen o ki, OBJ_LABLE türünde bir nesne için arka plan rengini ayarlamak mümkün değildir, OBJ_EDIT kullanmanız gerekir.
OBJ_EDIT kullanırken yeni bir sorun ortaya çıktı - tüm metnin nesnenin uygun boyutlarına sığması için OBJPROP_XSIZE ve OBJPROP_YSIZE boyutunu ayarlama ihtiyacı.

Soru: OBJPROP_XSIZE ve OBJPROP_YSIZE boyutları nasıl belirlenir, böylece tüm metin oraya sığar?
İki seçenek düşünüldü:
1. Bir OBJ_LABLE nesnesi oluşturun, boyutları okuyun, bir OBJ_LABLE nesnesini silin.
Boyutların okunması ancak nesnenin fiili oluşturulmasından sonra mümkün olduğundan ve nesne ChartRedraw için kuyruğa alındığında mümkün olmadığından uygun değildir.

2. TextSetFont'u ve ardından TextGetSize'ı kullanma.
Uygun değil, sonuç 1 No'lu yöntemin sonuçlarından kökten farklı olduğundan, yazı tipi boyutuna bağlı olarak farklar 2,5 - 2,9 kat.
Belki de nedeni 4K monitör ve %175 DPI'dır.

İlk olarak, metin boyutu ve nesne boyutu aynı şey değildir. En azından bir sınır olmalı. Ve böylece bu değerler uyuşamaz.
İkincisi, kısıtlaması olmayan OBJ_BITMAP_LABEL kullanmak daha iyidir.
Ve gerçekten kullanıyorsanız, CCanvas sınıfını kullanmak daha iyidir.

 #include <Canvas\Canvas.mqh>
          
void SetLabel(CCanvas &c, long achart, string name, int wnd, string text, color clr_text, color clr_bckgrnd, int x, int y, int corn= 0 , int fontsize= 8 , int border= 2 , string font= "Tahoma" , uchar transparency= 0xFF )
{
   uint w,h;
   c.FontSet(font, fontsize);
   c.TextSize(text, w, h);
   if (!c.CreateBitmapLabel(achart,wnd,name,x,y,w+border* 2 ,h+border* 2 , COLOR_FORMAT_ARGB_NORMALIZE ))
       Print ( "Error creating canvas object: " , GetLastError ());
   c.Erase( ColorToARGB (clr_bckgrnd,transparency));
   c. TextOut (border,border,text, ColorToARGB (clr_text,transparency));
   c.Update();
}

void OnStart (){     
   string obj_name = "test_obj" ;   
   string text = "AAAA::BBBB" ;
   int font_size = 17 ;
   string font_name = "Tahoma" ;
   CCanvas Can;
   SetLabel(Can, 0 , obj_name, 0 , text, clrYellow , clrBlue , 100 , 100 , 0 , font_size, 3 , font_name, 0x80 );
   Sleep ( 10000 );
   Can.Destroy();
}  

Sonuç olarak, aynı nesneyi yalnızca daha fazla özellik ile elde ederiz. Örneğin, bir metin etiketine şeffaflık ekleyerek.


 
Geess :

İlk olarak, metin boyutu ve nesne boyutu aynı şey değildir. En azından bir sınır olmalı. Ve böylece bu değerler uyuşamaz.

Yardımın için çok teşekkürler.
Hazır çözüm kendi ihtiyaçlarına göre uyarlanmıştır, bu nedenle kütüphaneleri tanıtmaya gerek yoktur.
Orijinal çözümünüz şu şekilde temsil edilebilir:

 void SetBitmapLabel( long achart, string name, int wnd, string text, color clr, color bgclr, int x, int y, int corn= 0 , int fontsize= 8 , string font= "Tahoma" , int border= 2 )
{
   uint w,h;
   TextSetFont (font, -10* fontsize, 0 , 0 );
   TextGetSize (text,w,h);
   w = w+border* 2 ;
   h = h+border* 2 ;
   
   uint pixels[];
   ArrayResize (pixels,w*h);
   ArrayInitialize (pixels, 0 );
   ENUM_COLOR_FORMAT color_format = COLOR_FORMAT_XRGB_NOALPHA ;
   string resource_name= "::" +name+( string ) ChartID ()+( string )( GetTickCount ()+ MathRand ());
   
   ResourceCreate (resource_name,pixels,w,h, 0 , 0 , 0 ,color_format);
   ObjectCreate (achart,name, OBJ_BITMAP_LABEL ,wnd, 0 , 0 );
   ObjectSetInteger (achart,name, OBJPROP_XDISTANCE ,x);
   ObjectSetInteger (achart,name, OBJPROP_YDISTANCE ,y);
   ObjectSetString (achart,name, OBJPROP_BMPFILE ,resource_name);
   ArrayInitialize (pixels, ColorToARGB (bgclr));
   TextOut (text,border,border, 0 ,pixels,w,h, ColorToARGB (clr),color_format);
   ResourceCreate (resource_name,pixels,w,h, 0 , 0 , 0 ,color_format);
}

void SetLabel( long achart, string name, int wnd, string text, color clr, int x, int y, int corn= 0 , int fontsize= 8 , string font= "Tahoma" )
{
         ObjectCreate (achart, name, OBJ_LABEL , wnd, 0 , 0 ); 
         ObjectSetInteger (achart, name, OBJPROP_CORNER , corn); 
         ObjectSetString (achart, name, OBJPROP_TEXT , text); ObjectSetInteger (achart, name, OBJPROP_COLOR , clr); 
         ObjectSetInteger (achart, name, OBJPROP_FONTSIZE , fontsize); ObjectSetString (achart, name, OBJPROP_FONT , font);
         ObjectSetInteger (achart, name, OBJPROP_SELECTABLE , false ); 
         ObjectSetInteger (achart, name, OBJPROP_BORDER_TYPE , 0 );
         ObjectSetInteger (achart, name, OBJPROP_XDISTANCE , x); ObjectSetInteger (achart, name, OBJPROP_YDISTANCE , y);
}

void OnStart (){     
   string obj_name = "test_obj" ;   
   string text = "AAAA::BBBB" ;
   int font_size = 50 ;
   string font_name = "Tahoma" ;
   
   SetBitmapLabel( 0 , "BL" + obj_name, 0 , text, clrRed , clrWhite , 100 , 100 , 0 , font_size, font_name);
   SetLabel      ( 0 , "L"   + obj_name, 0 , text, clrRed ,           100 , 200 , 0 , font_size, font_name);
   ChartRedraw ( 0 );
   Sleep ( 10000 );
}  


Ne yazık ki, MT5'teki bir kusur nedeniyle önerilen çözüm normal şekilde kullanılamaz.
Metin boyutu, %175 Windows DPI'lı bir 4K monitörde gerekenden 3 kat daha küçüktür.
Yazı tipi boyutunu DPI / %100 * [1.6 ... 1.8] ile çarpmanız gerekir.

Çözüm için teşekkürler Geess .
TextSetFont'a geçerken yazı tipi boyutunu -10 ile çarpmanız gerekiyor .




 
Sergey Dzyublik :

Yardımın için çok teşekkürler.
Hazır çözüm kendi ihtiyaçlarına göre uyarlanmıştır, bu nedenle kütüphaneleri tanıtmaya gerek yoktur.
Orijinal çözümünüz şu şekilde temsil edilebilir:


Ne yazık ki, MT5'teki bir kusur nedeniyle önerilen çözüm normal şekilde kullanılamaz.
Metin boyutu, %175 Windows DPI'lı bir 4K monitörde gerekenden 3 kat daha küçüktür.
Yazı tipi boyutunu DPI / %100 * [1.6 ... 1.8] ile çarpmanız gerekir.

https://www.mql5.com/ru/docs/objects/textsetfont


bunu yapmanız gerekir:

 void SetBitmapLabel( long achart, string name, int wnd, string text, color clr, color bgclr, int x, int y, int corn= 0 , int fontsize= 8 , string font= "Tahoma" , int border= 2 , uchar transparency= 0xFF )
{
   uint w,h;
   TextSetFont (font, - 10 *fontsize , 0 , 0 );
   TextGetSize (text,w,h);
   w = w+border* 2 ;
   h = h+border* 2 ;
   
   uint pixels[];
   ArrayResize (pixels,w*h);
   ArrayInitialize (pixels, 0 );
   ENUM_COLOR_FORMAT color_format = COLOR_FORMAT_ARGB_NORMALIZE ;
   string resource_name= "::" +name+( string ) ChartID ()+( string )( GetTickCount ()+ MathRand ());
   
   ResourceCreate (resource_name,pixels,w,h, 0 , 0 , 0 ,color_format);
   ObjectCreate (achart,name, OBJ_BITMAP_LABEL ,wnd, 0 , 0 );
   ObjectSetInteger (achart,name, OBJPROP_XDISTANCE ,x);
   ObjectSetInteger (achart,name, OBJPROP_YDISTANCE ,y);
   ObjectSetString (achart,name, OBJPROP_BMPFILE ,resource_name);
   ObjectSetInteger (achart,name, OBJPROP_BACK , false );
   ArrayInitialize (pixels, ColorToARGB (bgclr, transparency));
   TextOut (text,border,border, 0 ,pixels,w,h, ColorToARGB (clr, transparency),color_format);
   ResourceCreate (resource_name,pixels,w,h, 0 , 0 , 0 ,color_format);
}

void SetLabel( long achart, string name, int wnd, string text, color clr, int x, int y, int corn= 0 , int fontsize= 8 , string font= "Tahoma" )
{
         ObjectCreate (achart, name, OBJ_LABEL , wnd, 0 , 0 ); 
         ObjectSetInteger (achart, name, OBJPROP_CORNER , corn); 
         ObjectSetString (achart, name, OBJPROP_TEXT , text); ObjectSetInteger (achart, name, OBJPROP_COLOR , clr); 
         ObjectSetInteger (achart, name, OBJPROP_FONTSIZE , fontsize); ObjectSetString (achart, name, OBJPROP_FONT , font);
         ObjectSetInteger (achart, name, OBJPROP_SELECTABLE , false ); 
         ObjectSetInteger (achart, name, OBJPROP_BORDER_TYPE , 0 );
         ObjectSetInteger (achart, name, OBJPROP_XDISTANCE , x); ObjectSetInteger (achart, name, OBJPROP_YDISTANCE , y);
}

void OnStart (){     
   string obj_name = "test_obj" ;   
   string text = "AAAA::BBBB" ;
   int font_size = 50 ;
   string font_name = "Tahoma" ;
   
   SetBitmapLabel( 0 , "BL" + obj_name, 0 , text, clrRed , clrBlue , 100 , 100 , 0 , font_size, font_name, 2 , 0xA0 );
   SetLabel      ( 0 , "L"   + obj_name, 0 , text, clrBlue ,         100 , 200 , 0 , font_size, font_name);
   ChartRedraw ( 0 );
   Sleep ( 10000 );
}



OBJ_LABEL'e neden bu kadar ihtiyacınız olduğunu anlamıyorum? Seçeneği kitaplıklar olmadan OBJ_BITMAP_LABEL ile uyguladınız. Avantajı nedir? Sadece sınırlamalar görüyorum.

 
Hedef
Geess :

https://www.mql5.com/ru/docs/objects/textsetfont
OBJ_LABEL'e neden bu kadar ihtiyacınız olduğunu anlamıyorum? Seçeneği kitaplıklar olmadan OBJ_BITMAP_LABEL ile uyguladınız. Avantajı nedir? Sadece sınırlamalar görüyorum.

Tekrar çok teşekkür ederim.
-10 ile çarpma hakkında bilmiyordum, görmedim, okumadım. Sorun çözüldü.
OBJ_LABEL, sorunu görünür ve tekrarlanabilir hale getirmek için kullanıldı.

 
Merhaba!

Lütfen bana sorunun ne olduğunu söyle.

Doğru çalışan ve eşzamanlı olarak güncellenen farklı göstergeler, ana pencerede görüntülenen fiyat grafiğine göre değil, başka bir şey göstermeye başlar. Her gün değil ara sıra oluyor.

İlk başta göstergeler üzerinde günah işledim, ancak yerel MT 5 dahil olmak üzere farklı olanları denedikten sonra terminalin kendisinden şüphelenmeye başladım. Sorunu geçen yıldan beri terminalin farklı versiyonlarında uzun süredir gözlemliyorum. Önce Alpari'nin custom versiyonunda izledim şimdi orjinal versiyonunda aynı. Hem demo hesapta hem de gerçek ecn hesabında .

Komisyoncu Alpari. MT 5, 03/13/2020 tarihinden itibaren 2363 oluşturur. Diğer dönemlerde hatırlamıyorum ama M 1'de olan tam olarak bu.

Ekran görüntüleri:

"Uçan" seçeneği. Zigzag dışında tüm göstergeler yerleşiktir. Tarih ile doğru çalışma ile zikzak. Gösterge okumaları birbiriyle uyumludur. Fiyatlara katılmıyorum.

Güncellemeden sonra.

MT5 sürümü

Dosyalar:
 

Tünaydın.

Anlamadığım ve neler olduğunu bilmediğim bir şeye rastladım.

Farklı stratejilerde kullanılan iki fonksiyon vardır. Mantıksal olarak, tip kontrollerindeki kod

 if (m_position.PositionType()== POSITION_TYPE_SELL   && m_position.Magic()==magic)

koşullardan biri doğru değilse yürütülmemelidir. Ancak konumun sihirli numarası ve fonksiyona iletilen sihirli sayı EŞİT DEĞİLSE, bazı nedenlerden dolayı yürütülür.

Tamsayı türlerinin karşılaştırılması gibi. Neden, anlayamıyorum. Aşağıdaki günlük ekran görüntüsünde görebilirsiniz.


 void OpenNextBuyPositionBySignal(CTrade &m_trade, long magic, double ExtDP, double iuv, double imv, int itp, int isl, double etp, double esl, double ev, double &rev, string numstr, ulong &last_pt)
{
   for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--)
     if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
       if (m_position. Symbol ()==m_symbol.Name())
       {
           if (m_position.PositionType()== POSITION_TYPE_SELL   && m_position.Magic()==magic)
          {
             if ((m_position.Profit()+m_position.Swap()+m_position.Commission())< 0 )
             {
                 if (IsSetBuy(magic,ExtDP)== true )
                {
                     double cdist= MathFloor ( MathAbs ((m_position.PriceOpen()-m_position.PriceCurrent())/ExtDP));
                     Print ( "#1122 cdist " ,numstr, ": " ,cdist);
                     Print ( "#2211! m_position.PriceOpen(): " ,m_position.PriceOpen());
                     Print ( "#2212! m_position.PriceCurrent(): " ,m_position.PriceCurrent());
                     Print ( "#2213! ExtDP: " ,ExtDP);
                     Print ( "#2214! magic: " ,magic);
                     Print ( "#2215! ev: " ,ev);
                     Print ( "#2216! iuv: " ,iuv);
                     Print ( "#2217! m_position.Volume(): " ,m_position.Volume());
                     Print ( "#2218! m_position.Magic(): " ,m_position.Magic());
                    
                   
                     if ( NormalizeDouble (m_position.Volume()+iuv*cdist, 2 )<=imv)
                       ev= NormalizeDouble (m_position.Volume()+iuv*cdist, 2 );
                     if ( NormalizeDouble (m_position.Volume()+iuv*cdist, 2 )>imv)
                        ev= NormalizeDouble (imv, 2 );
                     rev=ev;
                     double sl= 0.0 ;
                     double tp= 0.0 ;
                     if (itp> 0 ) tp=m_symbol.Ask()+etp;
                     if (isl> 0 ) sl=m_symbol.Bid()-esl;
                     //m_trade.SetExpertMagicNumber(magic);
                     if (OpenBuy(m_trade,ev,sl,tp,numstr))
                     {
                        last_pt= POSITION_TYPE_BUY ;
                         FileWrite (filehandle,numstr+ ", " , TimeCurrent (), ", " ,GetLastPositionsType(magic), ", " ,GetPositionTicket(magic, POSITION_TYPE_BUY )); 
                         Print ( "#516! Position BUY after down SELL " +numstr);                                 
                         //Sleep(3000);
                         continue ;
                     }
                  }
               }
            }
             if (m_position.PositionType()== POSITION_TYPE_BUY   && m_position.Magic()==magic)
            {
               if ((m_position.Profit()+m_position.Swap()+m_position.Commission())< 0 )
               {
                   if (IsSetBuy(magic,ExtDP)== true )
                  {
                     double cdist= MathFloor ( MathAbs ((m_position.PriceOpen()-m_position.PriceCurrent())/ExtDP));
                     Print ( "#1123 cdist " , numstr, " : " ,cdist);
                     Print ( "#3211! m_position.PriceOpen(): " ,m_position.PriceOpen());
                     Print ( "#3212! m_position.PriceCurrent(): " ,m_position.PriceCurrent());
                     Print ( "#3213! ExtDP: " ,ExtDP);
                     Print ( "#3214! magic: " ,magic);
                     Print ( "#3215! ev: " ,ev);
                     Print ( "#3216! iuv: " ,iuv);
                     Print ( "#3217! m_position.Volume(): " ,m_position.Volume());
                     Print ( "#3218! m_position.Magic(): " ,m_position.Magic());
                    
                     if ( NormalizeDouble (m_position.Volume()+iuv*cdist, 2 )<=imv)
                        ev= NormalizeDouble (m_position.Volume()+iuv*cdist, 2 );
                     if ( NormalizeDouble (m_position.Volume()+iuv*cdist, 2 )>imv)
                        ev= NormalizeDouble (imv, 2 ); 
                     rev=ev;                          
                     double sl= 0.0 ;
                     double tp= 0.0 ;
                     if (itp> 0 ) tp=m_symbol.Ask()+etp;
                     if (isl> 0 ) sl=m_symbol.Bid()-esl;
                     //m_trade.SetExpertMagicNumber(magic);
                     if (OpenBuy(m_trade,ev,sl,tp,numstr))
                     {
                        last_pt= POSITION_TYPE_BUY ;
                         FileWrite (filehandle,numstr+ ", " , TimeCurrent (), ", " ,GetLastPositionsType(magic), ", " ,GetPositionTicket(magic, POSITION_TYPE_BUY )); 
                         Print ( "#517! Position BUY After down BUY " +numstr);                                 
                         //Sleep(3000);
                         continue ;
                     }
                  }
               } 
            }
         }
}


void OpenNextSellPositionBySignal(CTrade &m_trade, long magic, double ExtDP, double iuv, double imv, int itp, int isl, double etp, double esl, double ev, double &rev, string numstr, ulong &last_pt)
{
   for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--)
       if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if (m_position. Symbol ()==m_symbol.Name())
         {
             if (m_position.PositionType()== POSITION_TYPE_BUY   && m_position.Magic()==magic)
            {
               if ((m_position.Profit()+m_position.Swap()+m_position.Commission())< 0 )
               {
                   if (IsSetSell(magic,ExtDP)== true )
                  {
                     double cdist= MathFloor ( MathAbs ((m_position.PriceCurrent()-m_position.PriceOpen())/ExtDP));
                     Print ( "#1124 cdist " , numstr, " : " ,cdist);
                     Print ( "#4211! m_position.PriceOpen(): " ,m_position.PriceOpen());
                     Print ( "#4212! m_position.PriceCurrent(): " ,m_position.PriceCurrent());
                     Print ( "#4213! ExtDP: " ,ExtDP);
                     Print ( "#4214! magic: " ,magic);
                     Print ( "#4215! ev: " ,ev);
                     Print ( "#4216! iuv: " ,iuv);
                     Print ( "#4217! m_position.Volume(): " ,m_position.Volume());
                     Print ( "#4218! m_position.Magic(): " ,m_position.Magic());
                   
                     if ( NormalizeDouble (m_position.Volume()+iuv*cdist, 2 )<=imv)
                        ev= NormalizeDouble (m_position.Volume()+iuv*cdist, 2 );
                     if ( NormalizeDouble (m_position.Volume()+iuv*cdist, 2 )>imv)
                        ev= NormalizeDouble (imv, 2 );
                     rev=ev;
                     double sl= 0.0 ;
                     double tp= 0.0 ;
                     if (itp> 0 ) tp=m_symbol.Bid()-etp;
                     if (isl> 0 ) sl=m_symbol.Ask()+esl;
                     //m_trade.SetExpertMagicNumber(magic);
                     if (OpenSell(m_trade,ev,sl,tp,numstr))
                     {
                        last_pt= POSITION_TYPE_SELL ;
                         FileWrite (filehandle,numstr+ ", " , TimeCurrent (), ", " ,GetLastPositionsType(magic), ", " ,GetPositionTicket(magic, POSITION_TYPE_SELL )); 
                         Print ( "#518! Position SELL After down BUY " +numstr);                             
                         //Sleep(3000);
                         continue ;
                      }
                   }
                }
             }
             if (m_position.PositionType()== POSITION_TYPE_SELL   && m_position.Magic()==magic)
             {
                 if ((m_position.Profit()+m_position.Swap()+m_position.Commission())< 0 )
                {
                   if (IsSetSell(magic,ExtDP)== true )
                   {
                       double cdist= MathFloor ( MathAbs ((m_position.PriceCurrent()-m_position.PriceOpen())/ExtDP));
                       Print ( "#1125 cdist " , numstr, " : " ,cdist);
                       Print ( "#5211! m_position.PriceOpen(): " ,m_position.PriceOpen());
                       Print ( "#5212! m_position.PriceCurrent(): " ,m_position.PriceCurrent());
                       Print ( "#5213! ExtDP: " ,ExtDP);
                       Print ( "#5214! magic: " ,magic);
                       Print ( "#5215! ev: " ,ev);
                       Print ( "#5216! iuv: " ,iuv);
                       Print ( "#5217! m_position.Volume(): " ,m_position.Volume());
                       Print ( "#5218! m_position.Magic(): " ,m_position.Magic());
                    
                       if ( NormalizeDouble (m_position.Volume()+iuv*cdist, 2 )<=imv)
                         ev= NormalizeDouble (m_position.Volume()+iuv*cdist, 2 );
                       if ( NormalizeDouble (m_position.Volume()+iuv*cdist, 2 )>imv)
                         ev= NormalizeDouble (imv, 2 ); 
                      rev=ev;                             
                       double sl= 0.0 ;
                       double tp= 0.0 ;
                       if (itp> 0 ) tp=m_symbol.Bid()-etp;
                       if (isl> 0 ) sl=m_symbol.Ask()+esl;
                       //m_trade.SetExpertMagicNumber(magic);
                       if (OpenSell(m_trade,ev,sl,tp,numstr))
                      {
                        last_pt= POSITION_TYPE_SELL ;
                         FileWrite (filehandle,numstr+ ", " , TimeCurrent (), ", " ,GetLastPositionsType(magic), ", " ,GetPositionTicket(magic, POSITION_TYPE_SELL )); 
                         Print ( "#519! Position SELL After down SELL " +numstr);                                 
                         //Sleep(3000);
                         continue ;
                      }
                   }
                }
             }
          }
}


dergi
Заранее спасибо за ответ.
Neden: