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

 
TarasBY :

이 라인에 대해:

최근 DC는 기호 이름에 다른 접두사를 추가하는 경우가 많습니다(예: EURUSDm). 기호의 시장 환경을 참조할 때 반드시 고려해야 합니다.

추신 ...그리고 표준 "EURUSD"의 경우 StringSubstr("EURUSD", 6)은 0이 아니라 ""입니다.

정말 감사합니다, 이고르! 나는 DC와 편지에 대해 몰랐습니다. 이것은 아마도 "m"문자에 대한 미니 계정 일 것입니다.

그리고 당신은 모릅니다 - JPY 계수 82 는 어디에서 왔습니까? 다른 통화는 GBP - 0.625 , EUR - 0.7751937984였습니다.

이론적으로 환율을 변환할 때 환율이 변경되면 계수가 유동적입니다. 그렇다면 왜 상수를 사용합니까?
 
Chiripaha :

Nikolai, 당신이 프로그램을 만들고 프로그램을 만드는 법을 배우는 것은 아주 좋습니다. 그런데 사실은 프로그램에서 별도의 이해할 수 없는 경우에 도움을 요청하지 않았지만 실제로 프로그램을 작성하기 위해 TOR를 지정했습니다.

내 생각에 당신이 보여준 것은 은유적으로 말하면 로봇과 관련하여 이질적인 예비 부품 더미입니다. 모든 것이 완전히 잘못되었습니다.

따라서 여기에서 특정 오류를 지적하는 것은 불가능하기 때문입니다. 모든 것이 완전히 다르게 다시 실행되어야 합니다. - IMHO, 나는 더 많은 척하지 않습니다.

그러나 이것이 화를 낼 이유가 아닙니다. 더 많이 쓰는 법을 배우십시오. 여기에서 그들이 말했듯이 물론 당신은 "먹을"수 있습니다 (일). 그러나 당신 자신은 이것으로 가득 차지 않을 것입니다 (즉, 당신은 배우지 않을 것입니다). 계속 진행합니다. 길은 걷는 자가 지배할 것이다.

이 문제에 대해 다른 접근 방식으로 다시 작성해 보십시오. - 도움이 되었습니다.


비판해 주셔서 감사합니다. 말해봐, 이것을 구현하는 것이 정말로 가능합니까?
 
NICK_R :
비판해 주셔서 감사합니다. 말해봐, 이것을 구현하는 것이 정말로 가능합니까?

물론 진짜입니다. 그러나 그것은 정확히 쉬운 일이 아닙니다. 매우 어렵다고 말할 수는 없지만 쉽지도 않습니다. - 공부에 딱.
 
Chiripaha :

정말 감사합니다, 이고르! 나는 DC와 편지에 대해 몰랐습니다. 이것은 아마도 "m"문자에 대한 미니 계정 일 것입니다.

그리고 당신은 모릅니다 - JPY 계수 82 는 어디에서 왔습니까? 다른 통화는 GBP - 0.625 , EUR - 0.7751937984였습니다.

이론적으로 환율을 변환할 때 환율이 변경되면 계수가 유동적입니다. 그렇다면 왜 상수를 사용합니까?

Sergey, 이 수치는 나에게 아무 것도 말해주지 않으므로 이 질문에 대한 답이 없습니다.

그리고 문자를 쓸 때 접두사는 의미가 없을 수도 있고 없을 수도 있습니다.

 
TarasBY :

Sergey, 이 수치는 나에게 아무 것도 말해주지 않으므로 이 질문에 대한 답이 없습니다.

그리고 문자를 쓸 때 접두사는 의미가 없을 수도 있고 없을 수도 있습니다.

확인. 고맙습니다!
 

좋은 오후입니다 동료들!

주기의 주기에서 벗어날 수 있는 방법을 알려주십시오(코드에서 빨간색으로 강조 표시됨)? 표시기가 엄청나게 느려집니다.

 #property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  DarkGray
#property  indicator_color2  PowderBlue
#property  indicator_width1   2

//---- basic fan indicator parameters

extern bool Show_AOLine_2= true ;
extern int SlowEMA3= 34 ;
extern int EMA= 3 ;
extern bool Show_Volume= true ;
extern double coaf= 0.5 ;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];

     double   price_up_start, price_up_end, AO_up;
     double   price_dn_start, price_dn_end, AO_dn;
     datetime time_up, time_dn, AO_time_up, AO_time_dn;
     double Vol_AO_up, Vol_AO_dn;
     int shift_up, shift_dn, dn_koaf, up_koaf, dn_koaf_round, up_koaf_round;
    
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
   string name_ind = "Awesome_super_volumes" ;
   IndicatorShortName( "Awesome_super_volumes" );
   
   
//---- AO_fan line 2 (basic)
   if (Show_AOLine_2 == true ){Show_AOLine_2= DRAW_LINE ; }
   else 
    {Show_AOLine_2= DRAW_NONE ; }
   SetIndexBuffer ( 0 ,AOBuffer3);
   SetIndexStyle( 0 ,Show_AOLine_2);
   SetIndexLabel( 0 , "basic line" );   

   SetIndexBuffer ( 1 ,ExtMapBuffer1);
   SetIndexStyle( 1 , DRAW_HISTOGRAM );
   SetIndexLabel( 1 , "Volume" );
   
   //---- initialization done
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
  
   int     limit;
   int     counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;

    for ( int i= 0 ; i<limit; i++)   // -------------------------------------------- Основной цикл
   {
     
 //---- Awesom + Volumes
     
AOBuffer3[i]= iMA ( NULL , 0 ,EMA, 0 , MODE_SMA , PRICE_MEDIAN ,i)- iMA ( NULL , 0 ,SlowEMA3, 0 , MODE_SMA , PRICE_MEDIAN ,i);
if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
   if (AOBuffer3[i]<= 0 )Vol_Arr[i]=Volume[i]* Point *coaf;
   if (AOBuffer3[i]> 0 )Vol_Arr[i] = -Volume[i]* Point *coaf;
}

//----------------------------- Блок поиска значений -----------------------------------------//
 
 //-- Поиск Low & Time & Min_AO 
   if (AOBuffer3[i] < 0 )
  {
 price_up_end = 0 ; AO_up = 0 ;  
 price_dn_start = Low[i]; if (price_dn_end == 0 ) price_dn_end = Low[i]; 
 if (price_dn_start <= price_dn_end) {price_dn_end = price_dn_start; time_dn = Time[i]; shift_dn = iBarShift( NULL , 0 , time_dn);}
 if (AOBuffer3[i] <= AO_dn) {AO_dn = AOBuffer3[i]* 0.2 +AOBuffer3[i]; AO_time_dn = Time[i];}
 dn_koaf=dn_koaf_round;
 up_koaf_round++;
  }   
  
   //-- Поиск High & Time & Max_AO  
   if (AOBuffer3[i] > 0 )
   {
  price_dn_end = 0 ; AO_dn = 0 ;  
  price_up_start = High[i];
   if (price_up_start >= price_up_end) {price_up_end = price_up_start; time_up = Time[i]; shift_up = iBarShift( NULL , 0 , time_up);}
   if (AOBuffer3[i] >= AO_up) {AO_up = AOBuffer3[i]* 0.2 +AOBuffer3[i]; AO_time_up = Time[i];}
  up_koaf=up_koaf_round;
  dn_koaf_round++;
   }   
 //--------------------------------- Выставляем значения --------------------------------------------//
    
   Vol_AO_up = 0 ; Vol_AO_dn = 0 ;
   if (shift_up > shift_dn)
    {
 for ( int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
    Vol_AO_up += Volume[dn_br]; 
    SetText( "Awesome_super_volumes" +up_koaf, DoubleToStr(Vol_AO_up, 0 ), AO_time_dn, AO_dn, Blue);
          }   
  }
 
 if (shift_dn > shift_up)
    {
 for ( int up_br = shift_up; up_br <= shift_dn; up_br++)            //-------------- Еще один п еребор значений внутри основного цикла
          {
    Vol_AO_dn += Volume[up_br]; 
    SetText( "Awesome_super_volumes" +dn_koaf, DoubleToStr(Vol_AO_dn, 0 ), AO_time_up, AO_up, Red);
          }   
    }
 } 
           
//---- done

   return ( 0 );
  }
//+------------------------------------------------------------------+
void SetText( string name, string Vl, datetime t1, double p1, color c)
 {
   ObjectCreate (name, OBJ_TEXT ,WindowFind( "Awesome_super_volumes" ), 0 , 0 , 0 , 0 );
  ObjectSetText(name, Vl, 6 , "Arial Black" , c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR , c); 
  }

고맙습니다!


 
Fox_RM :

좋은 오후입니다 동료들!

주기의 주기에서 벗어날 수 있는 방법을 알려주십시오(코드에서 빨간색으로 강조 표시됨)? 표시기가 엄청나게 느려집니다.

고맙습니다!

그래도 나는 이것을, 어쩌면 어리석은 생각으로 표현할 것입니다. 그러나 아마도 더 합리적인 것이 나올 것입니다.

작업에 따라 최종 열거에 대한 일부 막대의 데이터가 필요하고 첫 번째 열거에서 데이터 값을 k-스레드 배열(또는 버퍼 - 저는 여기에서 특별한 전문가가 아닙니다)에 씁니다.

그리고 첫 번째 반복이 완료된 후 이 배열(버퍼)에서 필요한 값을 가져와 두 번째 반복에 대한 데이터를 얻습니다.

특히 속도에 도움이 될지 확신할 수 없습니다. 그러나 브레이크의 원인에 대해서도 잘 모릅니다. 이와 관련하여 더 자격이 있는 말을 하기는 어렵습니다.

장단점이 될 수 있습니다. 단점은 이 경우 온라인이 아닌 막대로 상황을 평가하지만 실제로는 데이터가 더 이상 필요하지 않을 때 상황을 평가한다는 것입니다. 그러나!... 이것은 사실 오래된 데이터를 다시 계산할 때 이미 온라인에 있고 필요하지 않다는 사실에 의해 상쇄됩니다. 그리고 실제 현재 데이터가 도착하면 즉시 2번째 열거되어 처리됩니다. 따라서 이 경우 관련성이 손실되어서는 안 됩니다. 그리고 플러스 - 그것은 당신이 설정한 작업을 해결할 것입니다: 열거에서 열거를 제거합니다. :))

아마도 나는 아무것도 배우지 못했을 것입니다. 내 생각을 비판적으로 받아들이세요. 글쎄요, 최고의 비평가는 연습입니다. 무엇이 작동하고 어떻게 작동하는지 작성하고 다시 확인하기만 하면 됩니다. 그렇게 생각해요.

 

실질적으로 차이는 없으며 제어점 A와 B를 얻는 과정이 약간 다를 뿐입니다. 이미 배열로 시도했습니다.

그런 다음 A와 B 사이에서 막대를 열거하여 주기도 구성해야 합니다. 다른 방법이 없어 질문드립니다.

아마도 누군가가 당신에게 말할 것입니다. 아마도 코드를 작성하는 논리가 절름발이입니까?

 
Fox_RM :

실질적으로 차이는 없으며 제어점 A와 B를 얻는 과정이 약간 다를 뿐입니다. 이미 배열로 시도했습니다.

그런 다음 A와 B 사이에서 막대를 열거하여 주기도 구성해야 합니다. 다른 방법이 없어 질문드립니다.

아마도 누군가가 당신에게 말할 것입니다. 아마도 코드를 작성하는 논리가 절름발이입니까?

네, 맞습니다. 여전히 열거형으로 루프를 수행해야 합니다. 따라서 피할 방법이 없습니다. 그리고 아마도 질문을 다르게 두는 것이 필요할 것입니다 - 브레이크가 발생하고 그것을 제거하는 방법으로 인해?
 
Fox_RM :

좋은 오후입니다 동료들!

주기의 주기에서 벗어날 수 있는 방법을 알려주십시오(코드에서 빨간색으로 강조 표시됨)? 표시기가 엄청나게 느려집니다.

고맙습니다!

여기이 곳에서 그룹화 할 수 있습니다. 이미 칠면조에 대한 약간의 최적화가 있습니다.

 if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
   if (AOBuffer3[i]<= 0 )Vol_Arr[i]=Volume[i]* Point *coaf;
   if (AOBuffer3[i]> 0 )Vol_Arr[i] = -Volume[i]* Point *coaf;
}

이것에:

 if (Show_Volume== true )
{
 double nSum = Volume[i]* Point *coaf; double Vol_Arr[];  // Не знаю в этом случае можно через запятую переменные прописывать? - double nSum = Volume[i]* Point *coaf, Vol_Arr[];

  if (AOBuffer3[i]<= 0 ) {ExtMapBuffer1[i] =  nSum; Vol_Arr[i] =  Volume[i]* Point *coaf;}
 if (AOBuffer3[i]> 0 )  {ExtMapBuffer1[i] = -nSum; Vol_Arr[i] = -Volume[i]* Point *coaf;}
}

바로 여기에:

AO_dn = AOBuffer3[i]* 0.2 +AOBuffer3[i];
// и тут
AO_up = AOBuffer3[i]* 0.2 +AOBuffer3[i];

다음으로 변경할 수 있습니다.

AO_dn = AOBuffer3[i]* 1.2 ;
     // и
AO_up = AOBuffer3[i]* 1.2 ;

그런 다음 "텍스트"가 표시기에 누적됩니다. 새 텍스트를 배치하기 전에 이전 텍스트를 삭제해야 합니다. 이것은 칠면조의 속도를 크게 늦출 수 있습니다. 아마도 이것이 이유일 것입니다. 왜냐하면 선택한 매개변수에 체크 표시가 있는 만큼 이러한 텍스트를 얻을 수 있습니다.

누군가 코드에서 이것을 구현하는 가장 좋은 방법을 알려준다면 - 그렇지 않으면 나 자신이 이런 종류의 코딩 도움말을 참조합니다.