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

 

나는 지표의 지지자가 아니지만 한 가지를 확인하기로 결정했습니다. 전문가는 각각 RSI 지표의 상위 가격에 매수하고 하위 가격에 매도해야 합니다. 가격이 이미 RSI 표시기 의 상한선 위에 있는 경우에만 구매가 이 경계선 위에 있어야 하고 이 경계선 값 + 경계선 위쪽에서 들여쓰기 값보다 낮아야 합니다(방금 표시한 코드에서 숫자 0.1 ), 반대로 판매용입니다.

나는 이것을 좋아했다:

외부 옵션:

 extern string ___H1 = " __________ Параметры RSI _________ " ;
extern int      i_RSITF = 5 ,
               i_RSIPeriod = 21 ,
               i_RSIApplied = PRICE_CLOSE ;
 extern   double   i_RSIToUpLimit = 55,                                      // Верхняя граница RSI
               i_RSIToDnLimit = 45;                                      // Нижняя граница RSI

신호와 RSI 값 자체를 수신하는 함수의 코드: (여기서 0.1 은 매수 또는 매도 범위의 마진입니다)

 //+-------------------------------------------------------------------------------------+
//| Получаем RSI с заданными параметрами                                                |
//+-------------------------------------------------------------------------------------+
double GetRSI( int RSIIndex)
{
   return ( iRSI ( NULL , i_RSITF, i_RSIPeriod, i_RSIApplied, RSIIndex));
}
//+-------------------------------------------------------------------------------------+
//| Получаем общий торговый сигнал                                                      |
//+-------------------------------------------------------------------------------------+
int GetGeneralSignal()
{
   if (FindOrders() > 0 )
       return (SIGNAL_NO);

 //  if (GetRSI(PRICE_CLOSE, 0) > GetRSI(PRICE_CLOSE, 1))
   if (GetRSI( 0 ) > i_RSIToUpLimit)
       if (GetRSI( 0 ) < (i_RSIToUpLimit + 0. 1 ))
         return (SIGNAL_BUY);                  // Запускаем функцию открытия покупки
           
   if (GetRSI( 0 ) < i_RSIToDnLimit)
       if (GetRSI( 0 ) > (i_RSIToDnLimit - 0.1 ))
         return (SIGNAL_SELL);                // Запускаем функцию открытия продаж
   
   return (SIGNAL_NO);
}

Expert Advisor는 때때로 레벨 자체에서 주문을 시작하고 때로는 훨씬 더 높거나(구매의 경우) 훨씬 더 낮습니다(판매의 경우). 왜요? 결국 알고리즘은 기본입니다.

 
안녕 모두. 질문이 있습니다. 여러 계정으로 작업할 때 유용하고 좋은 복사기 /**/를 설치했습니다. 그러나 문제는 컴퓨터에서 다른 프로그램(비디오, 게임, 카드만)을 병렬로 실행할 때 스피커에서 계속 딱딱거리는 소리가 난다는 것입니다. 이 문제(크랙)를 해결할 수 있습니까? 미리 감사드립니다.
 

제발 도와주세요. 뇌가 끓어오르고 있어요. 며칠 동안 싸웠는데 뭐가 문제인지 알 수가 없어요.

RSI(The MQL4 Language for Dummies. Custom Indicators (Part 1) 기사의 RandomIndicatorSignals.mq4 표시기)를 기반으로 하는 간단한 표시기를 작성하려고 합니다 ( https://www.mql5.com/ru/articles/1500 ) . 아날로그로 받아들였습니다.

본질은 간단합니다. RSI가 상단 또는 하단을 그리면 차트에 화살표를 그립니다.

내가 모든 것을 올바르게 한 것 같지만 제 생각에는 각 양초에 대한 RSI 값의 버퍼가 채워지지 않았기 때문에 작동하지 않습니다. 다음은 코드입니다.

 //+------------------------------------------------------------------+
//|                                                    RSI+Arrow.mq4 |
//|                                                         _______ |
//|                                                    |
//+------------------------------------------------------------------+
#property copyright "_______"
#property link       "_________"


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Crimson
#property indicator_color2 RoyalBlue
//---- input parameters
extern int        barsToProcess= 500 ;
//---- buffers
double ExtMapBuffer1[],
       ExtMapBuffer2[],
       RSIBuffer3[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers( 3 );
   SetIndexStyle( 0 , DRAW_ARROW );
   SetIndexArrow( 0 , 236 );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexStyle( 1 , DRAW_ARROW );
   SetIndexArrow( 1 , 238 );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexEmptyValue( 1 , 0.0 );
   SetIndexBuffer ( 2 ,RSIBuffer3);
   // для информации о значениях буфера
   SetIndexLabel  ( 2 , "RSIBuffer3" );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {    
   //расчет индикатора на последних барах 
   int limit,i;
   int counted_bars=IndicatorCounted();
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;
   if (limit>barsToProcess)
   limit=barsToProcess;
   
   //заполняем буфер RSI значениями 
   for (i= 0 ; i<limit; i++)
   if (i>= 1 )
     {
       RSIBuffer3[i]= iRSI ( 0 , 0 , 8 , PRICE_CLOSE , 0 );
     }       
   //проводим сравнения                        
   for (i= 0 ; i<limit; i++)
   if (i>= 1 )
        
        {
         if (RSIBuffer3[i+ 2 ]-RSIBuffer3[i+ 1 ]> 0 && RSIBuffer3[i+ 1 ]-RSIBuffer3[i]> 0 ) // условия выставления стрелки 

         /* так тоже не работает
        if(RSIBuffer3[i+2]>=RSIBuffer3[i+1] && RSIBuffer3[i+1]<=RSIBuffer3[i])
        */
        
        ExtMapBuffer2[i]=Low[i]- 5 * Point ;
                    
         else
           
        ExtMapBuffer2[i]= 0.0 ;
               
         if (RSIBuffer3[i+ 2 ]-RSIBuffer3[i+ 1 ]< 0 && RSIBuffer3[i+ 1 ]-RSIBuffer3[i]< 0 ) // условия выставления стрелки
        
         /* так тоже не работает
        if(RSIBuffer3[i+2]<=RSIBuffer3[i+1] && RSIBuffer3[i+1]>=RSIBuffer3[i])
        */
              
        ExtMapBuffer1[i]=High[i]+ 5 * Point ;
           
         else       
           
        ExtMapBuffer1[i]= 0.0 ;           
        }
                   
   return ( 0 );
   }
        
//+------------------------------------------------------------------+      
 
Merincool :

제발 도와주세요. 뇌가 끓어오르고 있어요. 며칠 동안 싸웠는데 뭐가 문제인지 알 수가 없어요.

RSI(The MQL4 Language for Dummies. Custom Indicators (Part 1) 기사의 RandomIndicatorSignals.mq4 표시기)를 기반으로 하는 간단한 표시기를 작성하려고 합니다 ( https://www.mql5.com/ru/articles/1500 ) . 아날로그로 받아들였습니다.

본질은 간단합니다. RSI가 상단 또는 하단을 그리면 차트에 화살표를 그립니다.

내가 모든 것을 올바르게 한 것 같지만 제 생각에는 각 양초에 대한 RSI 값의 버퍼가 채워지지 않았기 때문에 작동하지 않습니다. 다음은 코드입니다.

루프에서 계산되지 않은 지표 값에 액세스하고 있습니다.

변화

 for (i= 0 ; i<limit; i++)

 for (i=limit-1; i>= 0 ; i--)
 
PapaYozh :

루프에서 계산되지 않은 지표 값에 액세스하고 있습니다.

변화


생각해주셔서 감사합니다! 그러나 나는 "물리적 의미" 를 이해하고 싶습니다 :) 우리 물리학자가 말하곤 했습니다.

문제 자체: 2 "약간" 다르지만 본질적으로 동일한 작업 코드: 모든 보류 주문 삭제

1) 정상적으로 작동하지 않음 - 하나의 주문만 삭제합니다.

 void start()

  {

   bool    result;     int     cmd,total,OT;

   total= OrdersTotal ();

   for ( int i= 0 ; i<total; i++)

     {

       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))

        {

         cmd=OrderType();    OT=OrderTicket();

         if (cmd> 1 )   // !=OP_BUY && cmd!=OP_SELL)

           {

            result=OrderDelete(OT);

           }

        }

     } //end FOR

  }

2) 잘 작동합니다 - 모든 것을 제거합니다

 void start()
{
     string msg= "Удалить все отложенные ордера?    " ;
//   if (MessageBox(msg,title,MB_YESNO|MB_ICONQUESTION)!=IDYES) return;

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) if (OrderType()> 1 ) OrderDelete(OrderTicket());
   }
}

설명: "계산되지 않은 지표 값에 액세스하는 루프" 의 의미

 
PapaYozh :

루프에서 계산되지 않은 지표 값에 액세스하고 있습니다.

변화


씹을 수 있어? 왜 그런 겁니까? 앞으로 실수하지 않도록.
 
PapaYozh :

루프에서 계산되지 않은 지표 값에 액세스하고 있습니다.

변화


여전히 작동하지 않습니다. 막대 위로 마우스를 가져가면 RSIBuffer3이 마지막 막대의 RSI 값만 표시합니다.
 
Merincool :

여전히 작동하지 않습니다. 막대 위로 마우스를 가져가면 RSIBuffer3이 마지막 막대의 RSI 값만 표시합니다.

다섯 번째 매개변수는 0입니다. 마지막 바!

다음과 같이 하십시오.

       RSIBuffer3[i]= iRSI ( 0 , 0 , 8 , PRICE_CLOSE ,i);  

부두에서 추출:

이중 iRSI ( string symbol, int timeframe, int period, int apply_price, int shift)
상대 강도 지수를 계산하고 그 값을 반환합니다.
매개변수:
기호 - 지표를 계산하는 데 사용해야 하는 데이터의 기호입니다. NULL은 현재 기호를 의미합니다.
시간대 - 기간. Timeframe 열거형 값 중 하나일 수 있습니다. 0은 현재 차트 기간을 의미합니다.
기간 - 계산 기간 수입니다.
적용 가격 - 적용된 가격입니다. 적용된 가격 열거 값 중 하나일 수 있습니다.
옮기다 - 표시기 버퍼에서 가져온 값의 인덱스(주어진 기간 전에 현재 막대를 기준으로 이동).
 
PapaYozh :

루프에서 계산되지 않은 지표 값에 액세스하고 있습니다.

변화


그리고 여기에 내가 생각한 것이 있습니다. 귀하의 논리에 따르면 칠면조는 한계에서 0 bar까지 RSI를 계산해야하지만 끝에서 또는 처음부터 RSI를 계산할 쪽이 실제로 중요합니까? 그는 또한 지정된 범위의 각 막대에 대한 RSI를 계산하고 값을 버퍼(즉, 배열)에 넣은 다음 단순히 배열에 있는 세 개의 연속 값을 서로 비교해야 합니다. 아님?

 
amurik61 :

다섯 번째 매개변수는 0입니다. 마지막 바!

다음과 같이 하십시오.

부두에서 추출:

이중 iRSI ( string symbol, int timeframe, int period, int apply_price, int shift)
상대 강도 지수를 계산하고 그 값을 반환합니다.
매개변수:
기호 - 지표를 계산하는 데 사용해야 하는 데이터의 기호입니다. NULL은 현재 기호를 의미합니다.
시간대 - 기간. Timeframe 열거형 값 중 하나일 수 있습니다. 0은 현재 차트 기간을 의미합니다.
기간 - 계산 기간 수입니다.
적용 가격 - 적용된 가격입니다. 적용된 가격 열거 값 중 하나일 수 있습니다.
옮기다 - 표시기 버퍼에서 가져온 값의 인덱스(주어진 기간 전에 현재 막대를 기준으로 이동).

노력하겠습니다 감사합니다