[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 605

 
Zaten sordum, ama bana cevap vermediler. Birikimli bir Aralık Çubuğu Grafiği göstergesi olan var mı, yani. tek yönlü çubuklar birliği ile? Şuna benziyor:
 

Beyler, söyleyin bana - DC sitesinden terminal kurulumunu indirdim, strateji test cihazındaki baykuşları tam olarak bu DC'nin alıntıları üzerinde, test cihazında F2'ye bastığımda test etmek istiyorum - ve indirme aracı alıntıları böyle bir pencereyi atıyor ... Seçilen DC'den alıntılar indirmek mümkün mü?


 
Expert Advisor'daki sıfır bölme hatasından kurtulmama yardım edin.

Şimdiden teşekkür ederim.

 double BullSumm()
{
   double MySummBull= 0 ;
   for ( int Cnt= 0 ;Cnt< OrdersTotal ();Cnt++)
  { 
     OrderSelect (Cnt,SELECT_BY_POS,MODE_TRADES);
     if ( OrderType ()==OP_BUY)
    {
      MySummBull+= OrderOpenPrice ()* OrderLots ();
    }
  }
   return (MySummBull);
}
//--------------------------------------
double SummBullLots()
{
   double MySummBullLots= 0 ;
   for ( int Cnt= 0 ;Cnt< OrdersTotal ();Cnt++)
  { 
     OrderSelect (Cnt,SELECT_BY_POS,MODE_TRADES);
     if ( OrderType ()==OP_BUY)
    {
      MySummBullLots+= OrderLots ();
    }
  }
   return (MySummBullLots);
}
//---------------------------------------
..............
..............
   double BullAveragePrice = NormalizeDouble (BullSummOpenPrice()/SummBullLots(), Digits );
...............
...............

 
charter :
Tıpkı şimdi kapalı terminalinize yüklediğiniz gibi.
Ve o zaman hikayenin nasıl indirildiğini hatırlamıyorum, lütfen beni bağışlayın.
 
rustein :
Expert Advisor'daki sıfır bölme hatasından kurtulmama yardım edin.

Şimdiden teşekkür ederim.

Kodun özel bir durumu , satın alma siparişlerinin olmamasıdır. Bu sıfıra bölmek.
 
Zhunko :
Kodun özel bir durumu, satın alma siparişlerinin olmamasıdır. Bu sıfıra bölmek.

Teşekkürler, şu koşulla denedim:

int TotalBullOrders()
{
  int TotalBullOrders = 0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES);
    if(OrderMagicNumber()==Magic && OrderType()==OP_BUY)
    {
      TotalBullOrders++;
    }
  }
  return(TotalBullOrders);
} 
  if (TotalBullOrders()> 0 ){ double BullAveragePrice = NormalizeDouble (BullSummOpenPrice()/SummBullLots(), Digits );}

hala hata veriyor

 
rustein :

Teşekkürler, şu koşulla denedim:

hala hata veriyor

Kimin umrunda? Koşul içeriye geçmezse, çıkış sıfırdır. Buna bölünmüştür.
 
Zhunko :
Kimin umrunda? Koşul içeriye geçmezse, çıkış sıfırdır. Buna bölünmüştür.
Evet, anladım, teşekkürler.

Ben böyle koydum, başka bir yol bilmiyorum .......)

 //--------------------------------------
double SummBullLots()
{
   double MySummBullLots= 0.000000000000000000000000000000001 ;
   for ( int Cnt= 0 ;Cnt< OrdersTotal ();Cnt++)
  { 
     OrderSelect (Cnt,SELECT_BY_POS,MODE_TRADES);
     if ( OrderType ()==OP_BUY)
    {
      MySummBullLots+= OrderLots ();
    }
  }
   return (MySummBullLots);
}
//---------------------------------------
..............
..............
   double BullAveragePrice = NormalizeDouble (BullSummOpenPrice()/SummBullLots(), Digits );
...............
...............

 
Tünaydın! Stokastik'in bu versiyonunda, düz çizgilerin yapısını eklemeye karar verdim (grafikte)
aşırı alım/aşırı satım bölgeleri.

Geçmişten "eski" satırların silinmesiyle ilgili bir sorun oluştu. Yanlış olan nedir ve nelere dikkat etmeliyim?

 //+------------------------------------------------------------------+
//|                                              Stochastic_flat     |
//|                                         Copyright © 2012 Fox.RM  |
//|                                               fox.rm@mail.ru     |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012 Fox.RM"
#property link       "fox.rm@mail.ru"

//----
#property indicator_separate_window
#property indicator_buffers 4

//---- fan style
#property indicator_color1 Red
#property indicator_color2 Black
#property indicator_color3 Blue
#property indicator_color4 DarkGray

#property indicator_style1 0
#property indicator_style2 0
#property indicator_style3 0
#property indicator_style4 0
#property indicator_width4 2
#property indicator_level1 88.2
#property indicator_level2 11.8
 
#property indicator_levelcolor DarkGray
#property indicator_levelstyle 0

//---- basic fan indicator parameters
extern bool Show_STOCH_1=true;
extern int K_period1= 13 ;
extern int S_period1= 1 ;
extern bool Show_STOCH_2=true;
extern int K_period2= 34 ;
extern int S_period2= 1 ;
extern bool Show_STOCH_3=true;
extern int K_period3= 89 ;
extern int S_period3= 1 ;
extern bool Show_STOCH_4=true;
extern int K_period4= 233 ;
extern int S_period4= 1 ;
extern int delete = 2 ;

//---- indicator buffers
double MainBuffer1[];
double MainBuffer2[];
double MainBuffer3[];
double MainBuffer4[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {
//---- stochastic line 1 (fast)
   if (Show_STOCH_1 ==true){Show_STOCH_1= DRAW_LINE ; }
   else 
    {Show_STOCH_1= DRAW_NONE ; }
   SetIndexBuffer ( 0 ,MainBuffer1);
   SetIndexStyle ( 0 ,Show_STOCH_1, 0 );
   SetIndexLabel ( 0 , "fast WPR  ( " +K_period1+ " )" );
   
//---- stochastic line 2 (basic)
   if (Show_STOCH_2 ==true){Show_STOCH_2= DRAW_LINE ; }
   else 
    {Show_STOCH_2= DRAW_NONE ; }
   SetIndexBuffer ( 1 ,MainBuffer2);
   SetIndexStyle ( 1 ,Show_STOCH_2);
   SetIndexLabel ( 1 , "basic WPR ( " +K_period2+ " )" );
   
//---- stochastic line 3 (flat)
   if (Show_STOCH_3 ==true){Show_STOCH_3= DRAW_LINE ; }
   else 
    {Show_STOCH_3= DRAW_NONE ; }
   SetIndexBuffer ( 2 ,MainBuffer3);
   SetIndexStyle ( 2 ,Show_STOCH_3, 0 );
   SetIndexLabel ( 2 , "slow WPR ( " +K_period3+ " )" );
   
//---- stochastic line 4 (control)
   if (Show_STOCH_4 ==true){Show_STOCH_4= DRAW_LINE ; }
   else
    {Show_STOCH_4= DRAW_NONE ; }
   SetIndexBuffer ( 3 ,MainBuffer4);
   SetIndexStyle ( 3 ,Show_STOCH_4, 0 , 2 );
   SetIndexLabel ( 3 , "control WPR ( " +K_period4+ " )" );

   
//---- name for DataWindow and indicator subwindow label   
   IndicatorShortName ( "Stochastic_flat" );
  }

//----
   return ( 0 );

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+

int deinit()
  {
//---- 
   ObjectsDeleteAll ();
//----
   return ( 0 );
  }

//+------------------------------------------------------------------+
//| Stochastic_fan                                                   |
//+------------------------------------------------------------------+

int start()
  {
   int     i,shift,limit,y= 0 ,counted_bars= IndicatorCounted ();
   double x1,x2;
   datetime y1,y11,y2,y22;
//---- Plot defined timeframe on to current timeframe   
 
   limit= Bars -counted_bars;
   //---stroim stohastik
   for (i= 0 ,y= 0 ;i<limit;i++,y++)
     {
      MainBuffer1[i]= iStochastic ( NULL , 0 ,K_period1, 1 ,S_period1, 0 , 0 ,MODE_MAIN,y);
      MainBuffer2[i]= iStochastic ( NULL , 0 ,K_period2, 1 ,S_period2, 0 , 0 ,MODE_MAIN,y);
      MainBuffer3[i]= iStochastic ( NULL , 0 ,K_period3, 1 ,S_period3, 0 , 0 ,MODE_MAIN,y);
      MainBuffer4[i]= iStochastic ( NULL , 0 ,K_period4, 1 ,S_period4, 0 , 0 ,MODE_MAIN,y);
    
     //---flat zona
  
     
     if (MainBuffer1[i] < 11.8 ) //---pervoe uslovie
     {
     x1=Low[i];
     y1=Time[i]; //--- opredelyaem koordinaty dlya x1,y1
     }
     if (MainBuffer1[i] > 88.2 ) //---vtoroe uslovie
     {
     x2=High[i];
     y2=Time[i];   //--- opredelyaem koordinaty dlya x2,y2
     }
     }
     for (i= Bars ; i> 0 ; i--)
    {
     //--- opredelyaem koordinaty dlya x11,y11 
     if (Low[i]<x1)
     {
     y11=Time[i];
     }
     //--- opredelyaem koordinaty dlya x22,y22
     if (High[i]>x2)
     {
     y22=Time[i];
     }
     }    
     
   
   string up_line = "upline" ;
   string down_line = "downline" ;
     flatlineup(up_line+ TimeToStr (Time[i]), y2,x2,y22,x2, Red , 1 );
     flatlinedown(down_line+ TimeToStr (Time[i]), y1,x1,y11,x1, Blue , 1 );
  
    
   dellline(up_line,i);
     
     //----
     
   return ( 0 );
  }
//+------------------------------------------------------------------+
void flatlineup( string labebe, datetime time1, double price1, datetime time2, double price2, color colir, int W)
  {
     ObjectCreate (labebe, OBJ_TREND , 0 ,time1,price1,time2,price2);
   ObjectSet (labebe, OBJPROP_COLOR , colir);
   ObjectSet (labebe, OBJPROP_STYLE , 0 );
   ObjectSet (labebe, OBJPROP_RAY, 0 );
   ObjectSet (labebe, OBJPROP_WIDTH ,W);   
   ObjectSet (labebe, OBJPROP_BACK , true);
   }
   void flatlinedown( string labebe1, datetime time1, double price1, datetime time2, double price2, color colir, int W)
  {
   ObjectCreate (labebe1, OBJ_TREND , 0 ,time1,price1,time2,price2);
   ObjectSet (labebe1, OBJPROP_COLOR , colir);
   ObjectSet (labebe1, OBJPROP_STYLE , 0 );
   ObjectSet (labebe1, OBJPROP_RAY, 0 );
   ObjectSet (labebe1, OBJPROP_WIDTH ,W);   
   ObjectSet (labebe1, OBJPROP_BACK , true);
    }
   
void dellline( string name_line, int i)   //--- первый вариант с удалением линий
  {
     string name = ObjectName (i);
     if ( StringFind (name,name_line)!=- 1 ) ObjectDelete (name);

 // if (StringFind(name,name_line)!=-1)del1++;
 // if (del1>2)ObjectDelete(name);
   }
void dellline( string name_line)   //--- второй вариант с удалением линий  
{
string name, dellname; 
bool del = false;
for ( int i= ObjectsTotal (); i>= 0 ;i--)
    {
if (del == false){ //---при этом условии должна происходить идентификация первой линии 
name = ObjectName (i); //--выполняется при первом обращении к функции
dellname=name;
del = true;}
if (del == true){
if ( StringFind (dellname,name_line)!=- 1 ) ObjectDelete (dellname);
dellname=name;}
}   
} 
     //---Были и промежуточные варианты, которые также не дали желаемого результата.

Aşağıdaki örnekte işe yaradı. Ama gerçekten değil. Üst çizgiler yenilerinin görünmesiyle birlikte alt çizgiler ise hemen kaldırılır. Hangisi yüzünden?

 //------ функция удаляющая ненужные линии

void dellline( string name_line_up, string name_line_down) 
{
string name_l;
int obj= ObjectsTotal ( OBJ_TREND ); // --- в этой версии интуитивно добавил свойство OBJ_TREND
for ( int i=obj; i>= 0 ; i--)
{
name_l= ObjectName (i);
if ( StringFind (name_l,name_line_up)!=- 1 ) ObjectDelete (name_l);
if ( StringFind (name_l,name_line_down)!=- 1 ) ObjectDelete (name_l);
}}

Bu, işlevin neden eklemeden olması gerektiği gibi çalışmadığı ek bir soruyu gündeme getiriyor.

OBJ_TREND , bence bu durumda kardinal değişiklikler getirmiyor mu?

Ardından, ana kodda satır adlarıyla birkaç deney yapıldı.

 //-------------- первый вариант (рабочий)

string up_line = "upline_" , down_line = "downline_" ;
 
     flatlineup(up_line+ TimeToStr (Time[i]), y2,x2,y22,x2, Red , 1 );
     flatlinedown(down_line+ TimeToStr (Time[i]), y1,x1,y11,x1, Blue , 1 );
     dellline(up_line, down_line);

//---TimeToStr (Time[i]) указывал в имени тренд лайн в теле функции

//--------------- второй вариант (нерабочий)

string up_line = "upline_" + TimeToStr (Time[i]); //--или пробовал StringConcatenate()
string down_line = "downline_" + TimeToStr (Time[i]); //--или пробовал StringConcatenate()
 
     flatlineup(up_line, y2,x2,y22,x2, Red , 1 );
     flatlinedown(down_line, y1,x1,y11,x1, Blue , 1 );
     dellline(up_line, down_line);

TimeToStr(Time[i]) ana koddaki bir değişkende belirtildi.


Soru. İkinci seçeneğin neden çalışmadığı ortaya çıktı (yani, işlev

ikinci varyanta uygulanan dellline(), adları atanmış satırları kaldırmadı

up_line ve down_line değişkenleri?

Ve bir önceki gönderideki son soruyu çoğaltacağım, o ekranda. buna bir cevap bul

yapamadım.

Teşekkür ederim!

Dosyalar:
 
Lütfen söyleyin, belirli bir zamanda açık pozisyonların sayısını gösteren bir gösterge var mı? Daha da iyisi, kaçının SATIN ve kaçının HÜCRE olduğunu belirtirseniz.