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

 

EMA (5일/최소 및 최대)의 차이를 늘리면 최대 EMA 에서 매수하고 최소 EMA 에서 매도를 매수할 때 처방하는 방법을 알려주세요.

EMA 의 차이점으로 전역 변수의 헤더에 " Rastvor "를 사용합니다.

거래 기준에 이 코드를 작성하는 방법은 무엇입니까?

 
Fox_RM :

저것들. Vol_Arr[] 은 내가 이해하는 대로 전역 배열로 초기화해야 합니다.


질문은 물론 멍청한 놈이지만.

1. 표시기의 볼륨이 올바르게 표시되는 이유는 무엇입니까?

2. 계산할 때 Vol_Arr[]이 아니라 AOBuffer3[] 을 참조합니다 .

고맙습니다!


(버퍼가 아닌) 배열을 선언 할 때 그 크기를 명시적으로 지정해야 합니다....적어도.
 
Fox_RM :

저것들. Vol_Arr[] 은 내가 이해하는 대로 전역 배열로 초기화해야 합니다.


질문은 물론 멍청한 놈이지만.

1. 표시기의 볼륨이 올바르게 표시되는 이유는 무엇입니까?

2. 계산할 때 Vol_Arr[]이 아니라 AOBuffer3[] 을 참조합니다 .

고맙습니다!

하나.
 if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;
}
사용자가 직접 사용하고 표시기 버퍼 와 연결된 두 배열 - 즉, 메모리가 암시적으로 할당됩니다.
 SetIndexBuffer ( 0 ,AOBuffer3);
   SetIndexStyle( 0 ,Show_AOLine_2);
   SetIndexLabel( 0 , "basic line" );   

   SetIndexBuffer ( 1 ,ExtMapBuffer1);

지정된 배열( Vol_Arr[]) 에서 정적으로도 동적으로도 메모리를 전혀 할당하지 않습니다.

2. 코드에서 볼 수 있는 한 AOBuffer3[] 배열에서 볼륨이 아닌 MA 차이를 계산합니다.

   for ( int i= 0 ; i<limit; i++)
   {
     
 //---- AO_fan basic line + 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;
}

볼륨은 ExtMapBuffer1 에서 고려됩니다.

Vol_Arr[] 을 전역 변수로 초기화하거나 정적 수정자로 초기화할 수 있습니다(선택 사항). 그러나 메모리는 어떤 경우에도 할당되거나 이전 두 배열과 같이 표시기 버퍼와 연결되어야 합니다. 여러 옵션이 있습니다.

 
VladislavVG :
1. 직접 사용하고 표시기 버퍼와 연결된 두 배열 - 즉, 메모리가 (암시적이지만) 할당됩니다.

......

Vladislav, 코드를 다시 검토했습니다. Vol_Arr[] 이 있는 코드의 일부 는 표시기의 이전 버전에서 남아 있으므로 제거했습니다.

오류가 여전히 코드의 이 부분에 있다고 생각하지만 어디에 있는지 이해가 되지 않습니다! 코드의 이 부분을 더 자세히 주석 처리했습니다.

 
   //-- Поиск High & Time  
   if (AOBuffer3[i]>= 0 ) Если Awesome больше нуля
  {
  prhgh_s = High[i];                                            // -----
   if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}  --- Ищу самый высокий бар и определяю время этого бара // -- пока значение  tmhgh = 0 
  }   
   
   //-- Поиск Low & Time  
   if (AOBuffer3[i]<= 0 ) Если Awesome меньше нуля
  {
  prlw_s = Low[i];                                          // -----
   if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}    --- Ищу самый низкий бар и определяю время этого бара // -- пока значение  tmlw = 0
  } 
   // -- Пересчет баров от High до Low
   int colbr = iBarShift( NULL , 0 ,tmhgh)-iBarShift( NULL , 0 ,tmlw);  //-- Здесь считаю общее количество баров от наименьшего до наибольшего значения // -- пока значение  colbr = 0
  
   int shift=iBarShift( NULL , 0 ,tmlw); // -- Это точка отсчета
  
 for (i= 0 ; i<=colbr; i++)
{VLUP += MathAbs (iVolume( NULL , 0 , shift+i));} //-- Значению VLUP суммируем все объемы начиная от самого низкого бара до самого высокого бара // -- Значение  VLUP = 47

그림2

 
Fox_RM :

Vladislav, 코드를 다시 수정했습니다. Vol_Arr[] 이 있는 코드의 일부 는 표시기의 이전 버전에서 남아 있으므로 제거했습니다.

오류가 여전히 코드의 이 부분에 있다고 생각하지만 어디에 있는지 이해가 되지 않습니다! 코드의 이 부분을 더 자세히 주석 처리했습니다.

자, 이제 작동하는 전체 코드를 다시 게시하십시오. 나중에 살펴보겠습니다.
 

그는 다음과 같습니다.

#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Red
#property  indicator_color2  SteelBlue
#property  indicator_width1  2

//---- basic fan indicator parameters

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

double VLUP;
   double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s;
    datetime tmhgh, tmlw;

//+------------------------------------------------------------------+
//| 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;

//---- AO_fan line 2 (basic) buffer
   for(int i=0; i<limit; i++)
   {
     
 //---- AO_fan basic line + 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;
}
  }
   
  //-- Поиск High & Time  
  if (AOBuffer3[i]>=0) //Если Awesome больше нуля
  {
  prhgh_s = High[i];                                            // -----
  if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}  //--- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0
  }   
   
  //-- Поиск Low & Time  
  if (AOBuffer3[i]<=0) //Если Awesome меньше нуля
  {
  prlw_s = Low[i];                                          // -----
  if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}   // --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0
  } 
  // -- Пересчет баров от High до Low
  int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw);  //-- Здесь считаю общее количество баров от наименьшего до наибольшего значения // -- пока значение colbr = 0
  
  int shift=iBarShift(NULL,0,tmlw); // -- Это точка отсчета
  
 for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));} //-- Значению VLUP суммируем все объемы начиная от самого низкого бара до самого высокого бара // -- Значение VLUP = 47
       
  SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black);     
 
  SetText2("Волна1",DoubleToStr(VLUP,0),980,10,Gray,10); 
  SetText2("Волна2",TimeToStr(tmlw,0),980,25,Gray,10); 
  SetText2("Волна3",TimeToStr(tmhgh,0),980,40,Gray,10);
  SetText2("Волна4",DoubleToStr(colbr,0),980,55,Gray,10);  
  
  
      
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
 {
 // if (ObjectFind(name)!=-1) ObjectDelete(name);
  ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
  ObjectSetText(name, Vl, 10, "Times New Roman", c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR, c); 
  }
  
  void SetText2(string name, string text, int xdist, int ydist, color c, int size) 
 {                                                                                    
  ObjectCreate(name,OBJ_LABEL,0,0,0,0,0);     
  ObjectSet(name, OBJPROP_XDISTANCE, xdist);
  ObjectSet(name, OBJPROP_YDISTANCE, ydist);    
  ObjectSetText(name,text,7,"Arial Black",c);
 }

다시 한번 감사합니다!

 
Fox_RM :

그는 다음과 같습니다.



아무렇게나:

   for ( int i= 0 ; i<limit; i++)
   {
     
 //---- AO_fan basic line + 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;
}
  } // здесь цикл закончился
   
    //-- Поиск High & Time  
    if (AOBuffer3[ i ]>= 0 ) //Если Awesome больше нуля
  {
  prhgh_s = High[ i ];                                             // -----
   if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[ i ];}   //--- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0
  }   
   
   //-- Поиск Low & Time  
   if (AOBuffer3[ i ]<= 0 ) //Если Awesome меньше нуля
  {
  prlw_s = Low[ i ];                                           // -----
   if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[ i ];}   // --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0
  } 

선택한 조각이 루프 외부에 있고 루프 카운터 i 를 사용합니다. 논리나 구현에 문제가 있습니다.

 
hoz :

CSV 파일 형식의 수치가 필요한 이유는 무엇입니까?

인식 알고리즘을 테스트하고 디버깅하는 데 필요합니다.

호즈 :

그것을 이해하기 위해 자신을 쓰십시오. 다른 사람의 것을 취하지 마십시오.

정확히 무엇을 쓸까요? 차트에 수치를 직접 표시하고 해당 역사의 일부를 내보내는 것을 의미합니까? 이 솔루션은 지금까지 첫 번째 솔루션이지만 누군가가 이미 해보았으면 합니다. 결국 일상적인 작업일 뿐입니다.

호즈 :

더 많다고 더 좋은 것은 아닙니다!

동의하지 않겠습니다. 테스트를 위한 세트가 클수록 프로그램의 결과가 통계적으로 더 신뢰할 수 있습니다.


추신 질문은 여전히 적합합니다. ( 이 게시물의 질문 참조 )

 

여보세요!!!

현재 MA의 최대값에서 롱 포지션을 청산하려면 어떤 코드가 필요한지 알려주세요.

아래는 실제 거래 기준이며 명확하지 않은 빨간색으로 강조 표시되어 있습니다.

또한 프로그램에 위치를 종료하도록 지시하는 방법도 명확하지 않습니다.

MA1과 MA2의 차이를 늘린 후?

//------------------------------------------------ --------------- 5 --
// 거래 기준
MA_1_t=iMA(NULL,0, Period_MA_1,0 ,MODE_EMA,PRICE_HIGH,1); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,1); // MA_2

if ( iHigh (Symbol(),Period(),0) >= MA_1_t) //
{
Opn_S=참;
}
if ( iLow (Symbol(),Period(),0) <= MA_2_t) //
{
Opn_B=참; // 기준을 엽니다. 구입
}
if ( 오늘의 최대 iMA에서 long을 닫으려면 어떤 코드가 필요합니까??? )
{
Cls_B=참;
}
//------------------------------------------------ --------------- 6 --

 
VladislavVG :


아무렇게나:

선택한 조각이 루프 외부에 있고 루프 카운터 i 를 사용합니다. 논리나 구현에 문제가 있습니다.


블라디슬라프 감사합니다! 일이 일어나기 시작했습니다. 근데 왜 그냥 그래요? :(

쌀3

또 다른 질문은 텍스트 레이블이 표시기 창에 표시되지 않는 이유입니다.

 // -- Процедура
void SetText( string name, string Vl, datetime t1, double p1, color c)
 {
 // if (ObjectFind(name)!=-1) ObjectDelete(name);
   ObjectCreate (name, OBJ_TEXT ,WindowFind( "Awesome_super_volumes" ), 0 , 0 , 0 , 0 );
  ObjectSetText(name, Vl, 10 , "Times New Roman" , c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR , c); 
  }
// -- Обращение
SetText( "Awesome_super_volumes" , DoubleToStr(VLUP, 0 ), tmhgh, dist, Black);