MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 372

 
PokrovMT5 :

맥심, 좋은 오후입니다! 옵션에 감사드립니다. 제 것이 거의 동일하고 작동 중이지만 Alekseu Fedotov 가 다른 옵션을 제공했습니다. 나는 그것에 대해 썼고 그것을 수정하는 방법에 대한 아이디어가 있다고 썼습니까?



다시 그리기가 많이 움직이지 않는 경우(예: 시각적 표시기이거나 현재와 같이 어떤 식으로든 다시 계산할 것입니다) - OnCalculate 함수에서 반환합니다. 이전 시간의 시작 막대.

반환 rate_total-iBarShift(_Symbol,_Period,time[0]-TimeMinute(time[0])*60-TimeSeconds(time[0])-1); // 접근 방식을 보여주기 위해 "손으로 직접 작성하고 테스트하지 않음"과 같은 것입니다.

 
MakarFX : 해결했지만 문제가 해결되지 않습니다.
 // #property  copyright "Copyright © 2005, Yura Prokofiev"
// #property  link      "Yura.prokofiev@gmail.com"
#property   strict
#property   indicator_separate_window
#property   indicator_buffers 3
 
extern int       Barrs  = 10 ;     // Баров для расчета
extern string    simvol = "EURGBP" ;
double Buf_0[], Buf_1[], Buf_2[];

void OnInit ()
{
   SetIndexStyle ( 0 , DRAW_NONE );
   SetIndexStyle ( 1 , DRAW_HISTOGRAM , STYLE_SOLID , 2 ,Yellow);
   SetIndexStyle ( 2 , DRAW_HISTOGRAM , STYLE_SOLID , 2 ,Red);
   IndicatorDigits (( int ) SymbolInfoInteger (simvol, SYMBOL_DIGITS ));

   SetIndexBuffer ( 0 ,Buf_0);
   SetIndexBuffer ( 1 ,Buf_1);
   SetIndexBuffer ( 2 ,Buf_2);

   IndicatorShortName ( "Fisher " +simvol);
   SetIndexLabel ( 1 , NULL );
   SetIndexLabel ( 2 , NULL );
}

int start()
{
   int     i, limit, counted_bars= IndicatorCounted ();
   double prev,current;
   double Value= 0 , Value1= 0 , Value2= 0 , Fish= 0 , Fish1= 0 , Fish2= 0 ;
   double price, MinL= 0 , MaxH= 0 ;

   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;

   for (i= 0 ; i<limit; i++)
   {
      MaxH = iHigh (simvol,   0 , iHighest (simvol,   0 , MODE_HIGH ,Barrs,i));
      MinL = iLow (simvol,   0 , iLowest (simvol,   0 , MODE_LOW , Barrs,i));
      price = ( iHigh (simvol, 0 , i) + iLow (simvol, 0 , i))/ 2 ;
       if (MaxH != MinL)
      Value = 0.33 * 2 *((price-MinL)/(MaxH-MinL)- 0.5 ) + 0.67 *Value1;     
      Value= MathMin ( MathMax (Value,- 0.999 ), 0.999 ); 
      Buf_0[i]= 0.5 * MathLog (( 1 +Value)/( 1 -Value))+ 0.5 *Fish1;
      Value1=Value;
      Fish1=Buf_0[i];
   }
   bool up= true ;
   for (i=limit- 2 ; i>= 0 ; i--)
   {
      current=Buf_0[i];
      prev=Buf_0[i+ 1 ];
       if (((current< 0 )&&(prev> 0 ))||(current< 0 ))   up= false ;    
       if (((current> 0 )&&(prev< 0 ))||(current> 0 ))   up= true ;
      Buf_1[i]= 0 ;  Buf_2[i]= 0 ;
       if (!up) Buf_2[i]=current;
       else     Buf_1[i]=current;
   }
   return 0 ;
}

아래는 구형, 상단은 신형

차트의 기간이 사용되며 표시기는 0입니다.

 
YarTrade :

새로운 막대 모양으로 버퍼를 재설정하되 이전 데이터가 지워지지 않고 차트에 표시되도록 하는 방법을 알려주세요. 어떤 이유로 버퍼를 재설정 할 수 없으며 새로운 막대 의 출현으로 이전에 축적 된 데이터가 새로운 것으로 겹쳐집니다. 코드에서 내가 무엇을 잘못하고 있습니까? 설명 감사합니다.

새 막대 가 나타나면 터미널은 버퍼에 새로운 0 요소를 추가합니다. 라인 3 ... 6에서는 0으로 재설정됩니다. 나머지는 보관
 
STARIJ :
새 막대 가 나타나면 터미널은 버퍼에 새로운 0 요소를 추가합니다. 라인 3 ... 6에서는 0으로 재설정됩니다. 나머지는 보관

그렇다면 왜 새로운 막대 가 출현한 히스토그램의 막대는 이전 막대를 즉시 증가시키고 더 커지며, 다음 막대가 나타나는 순간에 다음 막대는 이전 막대의 증가를 갖는 이유는 무엇입니까?

 
YarTrade :

그렇다면 왜 새로운 막대 가 출현한 히스토그램의 막대는 이전 막대를 즉시 증가시키고 더 커지며, 다음 막대가 나타나는 순간에 다음 막대는 이전 막대의 증가를 갖는 이유는 무엇입니까?

당신은 요약을 가지고
V2 = V1 + V2;
 
안부 인사 나 스스로는 알 수 없지만 일종의 폴터가이스트 부주의 일지라도
 int ticket_order= 0 ;
void OnTick ()
{
   if ( OrdersTotal ()== 0 )
   {
     // километр кода
    ticket_order= OrderSend ( Symbol (),up_down,lots, Ask , 3 , 0 , 0 );
    }
     if ( OrdersTotal ()== 1 )
   {
     OrderSelect (ticket_order, SELECT_BY_TICKET );
     bool Ans= OrderModify (ticket_order,Price,SL,TP, 0 );
    }
}
     
   
이러한 조합에서 잘못된 티켓(OrderModify())이 있는 전략 테스터 에서 오류가 발생하고 n번째 주문에서 첫 번째도 아니고 두 번째도 아닌 경우에 무엇을 죄를 지을지 모르겠습니다. OrderModify() 또는 OrderSelect 티켓이 링크에 따라 전달되고 어떻게 든 변경 사항이 있습니까?
 
ijonhson : 잘못된 티켓 오류(OrderModify())
비슷했다. 곱창과 함께 첫 번째 및 두 번째 조건부 연산자를 재정렬하십시오. 도움이 될 수 있습니다.
 
STARIJ :

아래는 구형, 상단은 신형

차트의 기간이 사용되며 표시기는 0입니다.

정말 감사합니다. 이것이 내가 원했던 것입니다.
 
ijonhson :
안녕하세요 여러분, 저는 스스로 알아낼 수 없습니다.

이렇게 하면 오류를 더 쉽게 찾을 수 있습니다.

 if ( OrderSelect (ticket_order, SELECT_BY_TICKET ) )
  if ( OrderModify (ticket_order,Price,SL,TP, 0 ) ) {}
하지만 제 생각 에는 OrderSelect() 전에 tiket_order=(correct_ticket)이어야 합니다.
 
ijonhson :
모두들 안부 인사를 드려도 알 수 없는 일종의 직설적 폴터가이스트, 부주의일지도 모르지만 그런 무리에서 잘못된 티켓(OrderModify())으로 전략 테스터 에서 오류가 발생하고 n번째에 첫 번째도 아니고 두 번째도 아닌 주문, 저와 저는 무엇에 죄를 지을지 모릅니다. 아마도 OrderModify() 또는 OrderSelect에서 티켓이 참조로 전달되고 어떻게든 거기에서 변경됩니까?
티켓으로 주문을 선택한 다음 1km의 코드 후에 수정을 시도합니다. 그러나 현재로서는 이미 닫혀 있을 수 있습니다.