기고글 토론 "여러 상품을 거래하는 Expert Advisor 생성" - 페이지 3

 

6.누락된 것 같습니다:

TradePerformer( 4, Symb4, Trade4, StLoss4, TkProfit4, Lots4, Slippage4, UpSignal, DnSignal, UpStop, DnStop);

Exp_TEMA.mq5에서 ?

 
ias:

6. 누락된 것 같습니다.

빠진 것 같나요?

네! 비정상적인 더위 속에서 너무 열심히 일해서 과열되었나 봐요!
 
Renat:

재현 가능한 예제를 만들어 주세요. 즉, 컴파일하고 차트에 던져 결과를 얻을 수 있는 기성품 코드가 필요합니다.

이것이 없으면 우리가 무슨 말을 하는지 이해하는 사람은 거의 없을 것입니다.

괜히 사람들을 지체시키지 않기 위해 줄이기로 했습니다.

여기 정식 버전이 있습니다:

#property indicator_separate_window    // 표시기는 별도의 창에 그려집니다.
#property indicator_buffers 1



#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  Aqua

input string InstrumentName = "EURJPY";

//-- 표시기 배열
double ScreenBuffer[]; 

//-- 동적 버퍼 --
double ArrayBuffer[];

int OnInit()                          // 특수 init() 함수
{
//--------------------------------------------------------------------

   IndicatorSetString(INDICATOR_SHORTNAME,InstrumentName);
   SetIndexBuffer(0,ScreenBuffer,INDICATOR_DATA);
   return 0;                          // 종료
}
//--------------------------------------------------------------------
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{
int Counted_bars;   // 작동할 막대 수 
int copied;

//--------------------------------------------------------------------
   //1 입력 속도_총계 = 9667 / 이전 계산 = 0 / 막대 = 9667
   //-- then rates_total = 9667 / prev_calculated = 9667 / Bars = 9667
   //-- 처리 중 요금 총계 = 9668 / 이전 계산됨 = 9667 / 막대 = 9668
   //Print("rates_total: " + (문자열)rates_total);
   if (rates_total == prev_calculated) return (rates_total);//-- 여전히 같은 술집이니까, 우린 나갑니다.

   //-- 처리되지 않은 막대의 수를 가져옵니다(첫 번째 입력에서는 모두, 그 다음에는 1).
   //-- 출력 막대의 개수는 차트 자체를 의미하지만, 다른 상품을 출력할 것입니다.
   //-- 막대 수가 다를 수 있으므로 먼저 모든 데이터를 버퍼에 덤프합니다.
   Counted_bars = rates_total-prev_calculated;
   
   // Print("Counted_bars: " + Counted_bars);
   Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(Symbol(),0));
   //-- 메인 악기의 막대 수만큼 메모리를 할당합니다.
   if (ArrayResize(ArrayBuffer, Counted_bars,0) == -1) return (rates_total);//-- 메모리 할당 오류 -- --
   //--- EMPTY_VALUE 값으로 배열 요소를 초기화 ----
   ArrayInitialize(ArrayBuffer,EMPTY_VALUE);
         
   //-- 이 악기에 실제로 몇 개의 막대가 있는지 가져옵니다.
   copied = (int)SeriesInfoInteger(InstrumentName,0,SERIES_BARS_COUNT);
   
   if (copied > 0){
      copied=CopyClose(InstrumentName,0,0,copied,ArrayBuffer);//-- 메모리 버퍼에 데이터 쓰기 -- --
      if (copied <= 0) return (rates_total);//-- 오류
   } 
   else{

      return (rates_total);//-- 오류 
   }
    
   if (Counted_bars > copied) Counted_bars = copied;//-- 더 낮은 값을 가져옵니다.

   Counted_bars--;//-- 0부터 계산하기 때문에 --.
   //-- 데이터가 메모리 버퍼에 로드되었으니 이제 화면 버퍼에 오른쪽에서 왼쪽으로 씁니다.
   for (int i = Counted_bars; i > 0; i--){
      ScreenBuffer[i] = ArrayBuffer[i];
   }   
   
//--------------------------------------------------------------------
   return(rates_total);
}


void OnDeinit(const int reason)
{
   ObjectsDeleteAll(0,0,-1);             // 차트에서 모든 개체가 삭제됩니다.
}
 

다른 상품의 차트가 정상적으로 표시되지 않는 이유는 무엇인가요?

MQL4에서는 모든 것이 작동했지만 여기에서는 동일한 상품에 표시하는 경우에만 작동하며 오류는 없습니다.

 
gisip:

다른 상품의 차트가 정상적으로 표시되지 않는 이유는 무엇인가요?

MQL4에서는 모든 것이 작동했지만 여기에서는 동일한 상품에 표시하는 경우에만 작동하며 오류는 없습니다.


일반적으로 구현과 알고리즘의 정확성은 확실하지 않지만 코드와 제가 할 수 있었던 것을 바탕으로 가정합니다:

문자열

// Print("Counted_bars: " + Counted_bars);
Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(Symbol(),0));

은 다음과 같아야 합니다.

// Print("Counted_bars: " + Counted_bars);
Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(InstrumentName,Period()));


아마도 모든 곳에서 마침표를"0"으로 변경하는 것이 더 정확할 것입니다.

적어도 그러한 변경 후 모든 것이 저에게 효과가있었습니다.....

추신

아마도 관련이 없을 수도 있지만 이렇게하면 컴파일러가 훨씬 덜 중요합니다.

Print("rates_total: ",rates_total," / prev_calculated: ",prev_calculated," / Bars: ",Bars(InstrumentName, PERIOD_CURRENT));
 
Interesting:

일반적으로 올바른 구현과 알고리즘에 대해서는 잘 모르겠지만 코드와 제가 할 수 있었던 것을 바탕으로 그렇게 가정해 보겠습니다:

문자열

은 다음과 같아야 합니다.

추신

아마도 모든 곳에서 마침표를 "0"으로 변경하는 것이 더 정확할 것입니다.

적어도 그러한 변경 후 모든 것이 나를 위해 일했습니다....

변경했지만 여전히 작동하지 않고 그래프가 현실과 일치하지 않습니다.
 

제 화면에는 이렇게 표시됩니다:


분명히 잘못되었습니다.
 

제 결과는 다음과 같습니다.

그러나 인듀서의 로직과 구현에 대해 자세히 살펴보지 않았기 때문에 결과의 정확성을 판단하는 것은 제가 할 일이 아닙니다.


추신

나는 여전히 매개 변수의 기호를 제거하고 현재 심볼과 TF로 만든 다음 일반적인 iCustom ()을 사용하여 Expert Advisor 또는 다른 도구에서 사용합니다.

게다가 버퍼 (계산기의 꼬리 등을 의미 함)로 작업하는 논리를 실제로 이해하지 못합니다. 제 생각에는 작업 할 것이 많이 있습니다....

파일:
proba.mq5  4 kb
 
Interesting:

이것이 제가 얻은 것입니다.

그러나 인듀서의 로직과 구현에 대해 자세히 살펴보지 않았기 때문에 결과의 정확성을 판단하는 것은 제가 할 일이 아닙니다.


추신

나는 여전히 매개 변수에서 기호를 제거하고 현재 기호 및 TF에 따라 만든 다음 일반적인 iCustom ()을 사용하여 Expert Advisor 또는 다른 도구에서 사용합니다.


조언 주셔서 감사합니다, 나는 그것을 시도 할 것입니다.
 

Interesting:

게다가 버퍼 작업의 논리를 잘 이해하지 못합니다 (계산기의 꼬리 등을 의미합니다). 제 생각에는 작업 할 것이 많습니다....


나는 여전히 버퍼 작업 알고리즘에주의를 기울일 것입니다. 내가 올바르게 이해했다면 하나의 버퍼로 충분합니다 (올바르게 계산하고 차트에 그리기 만하면됩니다).

추신

그리고 현재 변형에서는 인덕터가 "오른쪽"(현재) 대신 "왼쪽"데이터 (역사의 맨 처음)를 표시한다는 인상을 받았습니다.....

또는이 지표의 논리에서 아무것도 이해하지 못합니다....