[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 605

 
이미 물었지만 그들은 나에게 대답하지 않았습니다. 누적이 있는 범위 막대 차트 표시기가 있는 사람이 있습니까? 단방향 막대의 조합으로? 다음과 같이 보입니다.
 

얘들 아, 말해봐 - 나는 DC 사이트에서 터미널 설정을 다운로드했습니다. F2 키를 누를 때 테스터에서 전략 테스터의 올빼미를 정확하게 테스트하고 싶습니다. 테스터에서 - 도구 따옴표를 다운로드하면 그런 창이 나옵니다 ...선택한 DC에서 견적을 다운받을 수 있다면?


 
Expert Advisor에서 0분할 오류를 없애도록 도와주세요.

미리 감사드립니다.

 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 :
지금 폐쇄된 터미널에 업로드한 것처럼.
그리고 그 이야기가 어떻게 다운로드되었는지 기억나지 않습니다. 저를 용서해 주십시오.
 
rustein :
Expert Advisor에서 0분할 오류를 없애도록 도와주세요.

미리 감사드립니다.

코드의 특별한 경우 는 구매 주문 이 없는 경우입니다. 그것은 0으로 나누는 것입니다.
 
Zhunko :
코드의 특별한 경우는 구매 주문이 없는 경우입니다. 그것은 0으로 나누는 것입니다.

감사합니다, 나는 조건으로 시도했습니다:

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 );}

여전히 오류가 발생합니다

 
rustein :

감사합니다, 나는 조건으로 시도했습니다:

여전히 오류가 발생합니다

무슨 상관이야? 조건이 내부를 통과하지 않으면 출력은 0입니다. 그것으로 나뉩니다.
 
Zhunko :
무슨 상관이야? 조건이 내부를 통과하지 않으면 출력은 0입니다. 그것으로 나뉩니다.
네, 알겠습니다. 감사합니다.

이렇게 하는건데 다른건 모르겠고.......)

 //--------------------------------------
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 );
...............
...............

 
안녕하세요! 이 버전의 스토캐스틱에서는 플랫 라인의 구성을 추가하기로 결정했습니다(차트에서)
과매수/과매도 구역.

기록에서 "이전" 줄을 삭제하는 데 문제가 있었습니다. 무엇이 잘못되었으며 무엇에주의를 기울여야합니까?

 //+------------------------------------------------------------------+
//|                                              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;}
}   
} 
     //---Были и промежуточные варианты, которые также не дали желаемого результата.

아래 예에서는 작동했습니다. 하지만 그렇지 않습니다. 상단 라인은 새로운 라인과 함께 제거되고 하단 라인은 즉시 제거됩니다. 무엇 때문에?

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

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);
}}

이것은 추가 질문을 제기합니다. 추가 하지 않고 기능이 작동하지 않는 이유는

OBJ_TREND , 제 생각에는 이 경우에 근본적인 변화를 가져오지 않습니까?

다음으로, 메인 코드의 라인명에 대한 몇 가지 실험이 있었습니다.

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

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])이 지정되었습니다.


문제. 두 번째 옵션이 작동하지 않는 것으로 판명된 이유 (즉,

두 번째 변형에 적용된 dellline()은 이름이 할당된 행을 제거하지 않았습니다.

변수 up_line 및 down_line?

그리고 이전 게시물의 마지막 질문 을 복제하겠습니다. 화면에 있습니다. 그것에 대한 답을 찾으십시오

할 수 없었다.

고맙습니다!

파일:
 
알려주십시오. 주어진 시간에 열린 위치 의 수를 표시하는 표시기가 있습니까? 그 중 몇 개가 BUY이고 몇 개인지 CELL인지 표시하면 더욱 좋습니다.