포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 971

 
korobok777 :
코드 없이는 아무 것도 말할 수 없습니다.
 

안녕하세요. 여기에 과매수/과매도 영역에서 RSI 출구에 대한 간단한 표시기를 작성했습니다. 작동합니다.

올바르게 화살표는 필요한 곳에 그립니다. 하지만 실시간으로만.

질문: n번째 막대에 대한 기록을 그리는 방법은 무엇입니까?

#속성 표시기_차트_창
#속성 표시기_버퍼 2
#property indicator_color1 라임그린
#property indicator_color2 라임그린

이중 rsi,rsi1,rsi2;
더블 크로스업[];
더블 크로스다운[];
정수 플래그 = 0;
정수 FLAG1 = 2;
부울 New_Bar=거짓;
정수 초기화()
{
//---- 표시기
SetIndexStyle(0,DRAW_ARROW,5,1);
SetIndexArrow(0, 233);
SetIndexBuffer(0, 크로스업);
SetIndexStyle(1,DRAW_ARROW,5,1);
SetIndexArrow(1, 234);
SetIndexBuffer(1, 크로스다운);
//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----

//----
리턴(0);
}
정수 시작()
{

rsi = iRSI(NULL,0,4,PRICE_CLOSE,0);
rsi1 = iRSI(NULL,0,4,PRICE_CLOSE,1);
rsi2 = iRSI(NULL,0,4,PRICE_CLOSE,2);



Fun_New_Bar();
int 제한, i, 카운터;
이중 범위, AvgRange;
for(i = 0, i <= 한계, i++) {
카운터 = 나;
범위=0;
평균 범위=0;
(카운터=i ;카운터<=i+9;카운터++)
{
AvgRange=AvgRange+MathAbs(높음[카운터]-낮음[카운터]);
}
범위=AvgRange/10;
if (FLAG<1 && rsi<rsi2 && rsi2>70 && rsi1<70)
{ 경고("RSI DOWN!!! on ", Symbol());
CrossDown[i] = 높음[i]+ 범위*1.8;
플래그=1;}
if(FLAG1>1 && rsi>rsi2 && rsi2<30 && rsi1>30)
{ 경고("RSI UP!!! on ", Symbol());
CrossUp[i] = 낮음[i]- 범위*1.8;
플래그1 = 1; }
if( New_Bar==true)
{플래그=0;}
if( New_Bar==true)
{FLAG1=2;}
}
리턴(0);
}
무효 Fun_New_Bar()
{
정적 날짜 시간 New_Time=0;
New_Bar=거짓;
if(New_Time!=시간[0])
{
New_Time=시간[0];
New_Bar=참;
}
}
 
Vinin :
코드 없이는 아무 것도 말할 수 없습니다.
 //==================================================================+
extern ENUM_TIMEFRAMES PERIOD_= PERIOD_H1 ; //Периоды графиков
//==================================================================+

string _ChartSymbol;
long    _ChartID,
       _ChartFirst,
       _ChartPeriod;
int start()
{ //---идентификатор графика начиная с первого 
    _ChartFirst= ChartFirst ();
if (_ChartFirst> 0 ) //если идентификатор больше ноля
{
 _ChartSymbol= ChartSymbol (_ChartFirst); //символ графика
 _ChartPeriod= ChartPeriod (_ChartFirst); //Периоды графика
 //---выполним функцию конвертации периода если не совпадает
if ( _ChartPeriod!=PERIOD_)
 {
   bool   ch= ChartSetSymbolPeriod (_ChartFirst,_ChartSymbol,PERIOD_);
 } 
}
return ( 0 );
}
int   deinit()
{
Alert ( "скрипт закончил работу" );
return ( 0 );
}
이것은 첫 번째 차트 에만 해당되며 팝업 창은 방해하지 않습니다.
 
Red_Manticore :

안녕하세요. 여기에 과매수/과매도 영역에서 RSI 출구에 대한 간단한 표시기를 작성했습니다. 작동합니다.

올바르게 화살표는 필요한 곳에 그립니다. 하지만 실시간으로만.

질문: n번째 막대에 대한 기록을 그리는 방법은 무엇입니까?


규칙에 따라 코드를 삽입하십시오. 먼저 읽어야 합니다! 동영상 버튼 왼쪽의 SRC를 클릭하고 "시트"를 삭제하십시오!

 #property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 LimeGreen
#property indicator_color2 LimeGreen

double rsi,rsi1,rsi2;
double CrossUp[];
double CrossDown[];
int FLAG = 0 ;
int FLAG1 = 2 ;
bool New_Bar= false ; 
 
int init()
  {
//---- indicators
  SetIndexStyle( 0 , DRAW_ARROW , 5 , 1 );
   SetIndexArrow( 0 , 233 );
   SetIndexBuffer ( 0 , CrossUp);
   SetIndexStyle( 1 , DRAW_ARROW , 5 , 1 );
   SetIndexArrow( 1 , 234 );
   SetIndexBuffer ( 1 , CrossDown);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return ( 0 );
  }
int start()
{  

rsi = iRSI ( NULL , 0 , 4 , PRICE_CLOSE , 0 );
rsi1 = iRSI ( NULL , 0 , 4 , PRICE_CLOSE , 1 );
rsi2 = iRSI ( NULL , 0 , 4 , PRICE_CLOSE , 2 );



Fun_New_Bar(); 
  
   int limit, i, counter;
   double Range, AvgRange;
     for (i = 0 ; i <= limit; i++) {
   
      counter=i;
      Range= 0 ;
      AvgRange= 0 ;
       for (counter=i ;counter<=i+ 9 ;counter++)
      {
         AvgRange=AvgRange+ MathAbs (High[counter]-Low[counter]);
      }
      Range=AvgRange/ 10 ;
       if (FLAG< 1 && rsi<rsi2 && rsi2> 70 && rsi1< 70 )
      { Alert ( "RSI DOWN!!! on " , Symbol ());
      CrossDown[i] = High[i]+ Range* 1.8 ;
          FLAG = 1 ;} 
       if (FLAG1> 1 && rsi>rsi2 && rsi2< 30 && rsi1> 30 )
      { Alert ( "RSI UP!!! on " , Symbol ());
      CrossUp[i] = Low[i]- Range* 1.8 ;
         FLAG1 = 1 ; } 
   
       if ( New_Bar== true )
       {FLAG= 0 ;}
       if ( New_Bar== true )
       {FLAG1= 2 ;} 
   
   }
   return ( 0 );
  } 
  
   void Fun_New_Bar()                              
  {                                             
   static datetime New_Time= 0 ;                  
   New_Bar= false ;                               
   if (New_Time!=Time[ 0 ])                        
     { 
      New_Time=Time[ 0 ];                         
      New_Bar= true ;                            
     } 
  }     
ответить
 
korobok777 :
이것은 첫 번째 차트에만 해당되며 팝업 창은 간섭하지 않습니다.

스크립트는 열려 있는 모든 차트 를 처리합니다. 현재 것이 마지막으로 처리됩니다. 스크립트는 시간 프레임을 변경하면 작업을 종료하므로 스크립트 완료에 대한 경고 창이 한 번만 날아갑니다. 모든 차트에서 기간이 지정된 기간으로 변경됩니다.

 //+------------------------------------------------------------------+
//|                                             ReplaceTimeFrame.mq4 |
//|                                            Copyright 2015, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vinin"
#property link        "http://vinin.ucoz.ru"
#property version    "1.00"
#property strict

#property show_inputs

input ENUM_TIMEFRAMES PERIOD_= PERIOD_H1 ; //Периоды графиков

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   long id= ChartFirst ();
   long id_current= ChartID ();
   int i= 0 ;
   while (i< 100 )
     {
       ENUM_TIMEFRAMES _ChartPeriod= ChartPeriod (id); //Периоды графика
       if (_ChartPeriod!=PERIOD_ && id!=id_current)
        {
         bool   ch= ChartSetSymbolPeriod (id, ChartSymbol (id),PERIOD_);
        }

      id= ChartNext (id);
       if (id< 0 ){ break ;}
      i++;
     }
   ENUM_TIMEFRAMES _ChartPeriod= ChartPeriod (id_current); //Периоды графика
   if (_ChartPeriod!=PERIOD_)
     {
       bool   ch= ChartSetSymbolPeriod (id_current, ChartSymbol (id_current),PERIOD_);
     }
  }
 
Vinin :

스크립트는 열려 있는 모든 차트를 처리합니다. 현재 것이 마지막으로 처리됩니다. 스크립트는 시간 프레임을 변경하면 작업을 종료하므로 스크립트 완료에 대한 경고 창이 한 번만 날아갑니다. 모든 차트에서 기간이 지정된 기간으로 변경됩니다.


Ai))) 수고하셨습니다!!!! 감사합니다!!!
 

안녕하세요,

배열을 선언

이중 gdClose_array[];

ArrayResize(gdClose_array, 1);

현재 차트에서 마지막으로 닫힌 막대로 닫는 배열에 데이터를 복사합니다.

iX=CopyClose(Symbol(), PERIOD_CURRENT ,1,1,gdClose_array) ;

배열의 값 검색

이중 dX=NormalizeDouble(gdClose_array[0], 숫자);

Print("NormalizeDouble(dX, 숫자)", dX);

번호를 받았지만 분명히 정확하지 않습니다.

NormalizeDouble(dX, 자릿수) 1.0644

그래프(시각화)에 따르면 근처에 그런 값이 없지만

그리고 이 값은 테스트 중에 변경되지 않습니다.

추가

ArraySetAsSeries(gdClose_array, true);

상황은 변하지 않았다

실수는 어디에 있습니까?

 
n0name :

안녕하세요,

...

현재 차트에서 마지막으로 닫힌 막대로 닫는 배열에 데이터를 복사합니다.

iX=CopyClose(Symbol(),PERIOD_CURRENT,1,1,gdClose_array) ;

여기 에서는 배열 요소의 인덱스를 지정하지 않고 배열의 이름만 기록했습니다. 이전부터 ArrayResize(gdClose_array, 1); 배열 요소의 수를 1로 설정하면 해당 인덱스는 0입니다. 따라서 다음을 수행해야 합니다.

iX= CopyClose ( Symbol (), PERIOD_CURRENT , 1 , 1 ,gdClose_array[ 0 ]);


그리고 몇 가지 질문/조언이 더 있습니다.

1) 1개의 값만 기억해야 하는 경우 배열 대신 변수를 사용할 수 있습니다. 그런 다음 대신:

 double gdClose_array[];
ArrayResize (gdClose_array, 1 ); 

하다

 double gdClose_array;

그런 다음 원래 코드로.

2) 배열이 필요하지만 요소가 1개만 있다는 것을 즉시 알면 동적 배열을 선언한 다음 크기를 설정하는 대신 요소가 1개인 정적 배열을 즉시 선언합니다. 추가 작업이 필요하지 않습니다.

대신에

 double gdClose_array[];
ArrayResize (gdClose_array, 1 );

써 내려 가다

 double gdClose_array[ 1 ];

~ 후에

iX= CopyClose ( Symbol (), PERIOD_CURRENT , 1 , 1 ,gdClose_array[ 0 ]);

그런 다음 원래 코드로.

 

안녕하세요! 프로그래머를 위한 질문입니다.

오더가 열렸을 때 발동되는 어드바이저가 있으며, 지정된 포인트만큼 손절매를 하고 이익을 얻습니다.

문제.

정지 손실 대신 EA가 동일한 볼륨의 보류 중인 역 정지 주문 을 배치하도록 코드를 변경할 수 있습니까?

이를 위해 코드에서 무엇을 변경해야 합니까?

고맙습니다.

 

안녕하세요!

다시 말하지만, 아마도 기본적인 것에서 벗어날 수 없습니다. 왜 모든 것이 도움말에 있는 것처럼 보이지만 결과는 0.0을 인쇄합니까?

   double FractalDown_1 = iFractals ( NULL , 0 ,MODE_LOWER, 1 ); Print ( "FractalDown_1=" ,FractalDown_1);

프랙탈 값이 검색되지 않는 이유는 무엇입니까?

사유: