strongflex : 또한 RSI가 20분 전에 레벨을 넘었다면 가격을 확인합니다. 매우 감사합니다. 모든 것이 나와 함께 작동한다면 약속))
가능한 한 MQL5에 가깝게 하기 때문에 시간의 막대 이동을 얻고 종가 를 얻기 위해 MQL4 함수를 사용하지 않습니다(각각 iBarShift() 및 iClose()).
이를 위해 GetBarShift() 및 GetPriceClose()와 같은 자체 함수를 만듭니다. 또한 표준 MQL4 함수를 포기하기 때문에 iTime() 대신 GetTime() 함수를 사용하여 막대 시간을 가져와야 합니다.
테스트 어드바이저는 다음과 같습니다.
//+------------------------------------------------------------------+ //| exTestValueRSI.mq4 | //| Copyright 2016, Artem A. Trishkin, Skype artmedia70 | //| https://login.mql5.com/ru/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright"Copyright 2016, Artem A. Trishkin, Skype artmedia70" #property link"https://login.mql5.com/ru/users/artmedia70" #property version"1.00" #property strict //--- input parameters inputENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15 ; // Таймфрейм RSI inputint PeriodRSI = 14 ; // Период расчёта RSI inputENUM_APPLIED_PRICE PriceRSI = PRICE_CLOSE ; // Цена расчёта RSI inputint MinutesBefore = 20 ; // Количество минут назад //--- global variables int minutesBefore; // Количество минут назад int periodRSI; // Период расчёта RSI //--- double prevRSIvalue0; // Значение RSI для заданного тф xxx минут назад double prevRSIvalue1; // Значение RSI для заданного тф xxx минут назад-x минут //--- double prevClose_0; // Значение Close для заданного тф xxx минут назад double prevClose_1; // Значение Close для заданного тф xxx минут назад-x минут //--- datetime timeBefore; // Время ххх минут назад datetime timePrevBefore; // Время ххх минут назад-x минут //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ intOnInit () { //--- minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore); // Количество минут назад periodRSI=(PeriodRSI< 1 ? 1 :PeriodRSI); //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ voidOnDeinit ( constint reason) { //---
} //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ voidOnTick () { //--- int shift_0; int shift_1; //--- MqlDateTime server_time; TimeToStruct ( TimeCurrent (),server_time); string tf= EnumToString (TimeframeRSI); //--- если значение минут серверного времени кратно заданному значению, в частности 20-ти минутам или равно 0 if (server_time.min%minutesBefore== 0 || server_time.min== 0 ) { //--- время 1x и 2x минут назад timeBefore= TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 ); timePrevBefore= TimeCurrent ()- 2 *minutesBefore* PeriodSeconds ( PERIOD_M1 ); //--- смещение в барах времени 1х и 2х для заданного таймфрейма RSI (тф М15) shift_0=GetBarShift( Symbol (),TimeframeRSI,timeBefore); shift_1=GetBarShift( Symbol (),TimeframeRSI,timePrevBefore); //--- значения RSI на барах 1х и 2х минут назад для заданного таймфрейма RSI (тф М15) prevRSIvalue0=GetLastDataRSI( Symbol (),TimeframeRSI,shift_0); prevRSIvalue1=GetLastDataRSI( Symbol (),TimeframeRSI,shift_1); //--- значения цен закрытия баров 1х и 2х минут назад prevClose_0=GetPriceClose( Symbol (),TimeframeRSI,shift_0); prevClose_1=GetPriceClose( Symbol (),TimeframeRSI,shift_1); } Comment ( "\nТекущее время: " , TimeCurrent (), "\nВремя " ,minutesBefore, " минут назад: " , TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 ), "\nБар " ,tf, "_0=" ,shift_0, ", бар " ,tf, "_1=" ,shift_1, "\nМинуты текущего времени: " ,server_time.min, "\nЗначение RSI " ,minutesBefore, " минут назад на " ,tf, " : " , DoubleToString (prevRSIvalue0, 4 ), "\nЗначение RSI " ,minutesBefore* 2 , " минут назад на " ,tf, " : " , DoubleToString (prevRSIvalue1, 4 ), //--- "\nЗначение Close " ,minutesBefore, " минут назад > " ,tf, " : " , DoubleToString (prevClose_0, Digits ()), "\nЗначение Close " ,minutesBefore* 2 , " минут назад > " ,tf, " : " , DoubleToString (prevClose_1, Digits ()) ); } //+------------------------------------------------------------------+ double GetLastDataRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int period_rsi= 14 , ENUM_APPLIED_PRICE price_rsi= PRICE_CLOSE ) { return ( iRSI (symbol_name,timeframe,period_rsi,price_rsi,shift)); } //+------------------------------------------------------------------+ double GetPriceClose( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){ double array[ 1 ]; if ( CopyClose (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]); return (- 1 ); } //+------------------------------------------------------------------+ int GetBarShift( string symbol_name, ENUM_TIMEFRAMES timeframe, datetime time) { if (time< 0 ) return (- 1 ); //--- datetime array[], time0; if ( CopyTime (symbol_name,timeframe, 0 , 1 ,array)< 0 ) return (- 1 ); time0=array[ 0 ]; if ( CopyTime (symbol_name,timeframe,time0,time,array)< 0 ) return (- 1 ); datetime temptime=GetTime(symbol_name,timeframe, ArraySize (array)- 1 ); if (array[ 0 ]==temptime && temptime<=time) return ( ArraySize (array)- 1 ); elsereturn ( ArraySize (array)); } //+------------------------------------------------------------------+ datetime GetTime( string symbol_name, ENUM_TIMEFRAMES timeframe, int bar) { if (bar< 0 ) return (- 1 ); datetime array[]; if ( CopyTime (symbol_name,timeframe,bar, 1 ,array)> 0 ) return (array[ 0 ]); return (- 1 ); } //+------------------------------------------------------------------+
이제 적시에 RSI에 대한 데이터 수신을 별도의 기능으로 정렬하고 가격과 RSI 값을 비교해야 합니다.
가능한 한 MQL5에 가깝게 하기 때문에 시간의 막대 이동을 얻고 종가 를 얻기 위해 MQL4 함수를 사용하지 않습니다(각각 iBarShift() 및 iClose()).
이를 위해 GetBarShift() 및 GetPriceClose()와 같은 자체 함수를 만듭니다. 또한 표준 MQL4 함수를 포기하기 때문에 iTime() 대신 GetTime() 함수를 사용하여 막대 시간을 가져와야 합니다.
테스트 어드바이저는 다음과 같습니다.
//+------------------------------------------------------------------+ //| exTestValueRSI.mq4 | //| Copyright 2016, Artem A. Trishkin, Skype artmedia70 | //| https://login.mql5.com/ru/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright"Copyright 2016, Artem A. Trishkin, Skype artmedia70" #property link"https://login.mql5.com/ru/users/artmedia70" #property version"1.00" #property strict //--- input parameters inputENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15 ; // Таймфрейм RSI inputint PeriodRSI = 14 ; // Период расчёта RSI inputENUM_APPLIED_PRICE PriceRSI = PRICE_CLOSE ; // Цена расчёта RSI inputint MinutesBefore = 20 ; // Количество минут назад //--- global variables int minutesBefore; // Количество минут назад int periodRSI; // Период расчёта RSI //--- double prevRSIvalue0; // Значение RSI для заданного тф xxx минут назад double prevRSIvalue1; // Значение RSI для заданного тф xxx минут назад-x минут //--- double prevClose_0; // Значение Close для заданного тф xxx минут назад double prevClose_1; // Значение Close для заданного тф xxx минут назад-x минут //--- datetime timeBefore; // Время ххх минут назад datetime timePrevBefore; // Время ххх минут назад-x минут //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ intOnInit () { //--- minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore); // Количество минут назад periodRSI=(PeriodRSI< 1 ? 1 :PeriodRSI); //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ voidOnDeinit ( constint reason) { //---
} //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ voidOnTick () { //--- int shift_0; int shift_1; //--- MqlDateTime server_time; TimeToStruct ( TimeCurrent (),server_time); string tf= EnumToString (TimeframeRSI); //--- если значение минут серверного времени кратно заданному значению, в частности 20-ти минутам или равно 0 if (server_time.min%minutesBefore== 0 || server_time.min== 0 ) { //--- время 1x и 2x минут назад timeBefore= TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 ); timePrevBefore= TimeCurrent ()- 2 *minutesBefore* PeriodSeconds ( PERIOD_M1 ); //--- смещение в барах времени 1х и 2х для заданного таймфрейма RSI (тф М15) shift_0=GetBarShift( Symbol (),TimeframeRSI,timeBefore); shift_1=GetBarShift( Symbol (),TimeframeRSI,timePrevBefore); //--- значения RSI на барах 1х и 2х минут назад для заданного таймфрейма RSI (тф М15) prevRSIvalue0=GetLastDataRSI( Symbol (),TimeframeRSI,shift_0); prevRSIvalue1=GetLastDataRSI( Symbol (),TimeframeRSI,shift_1); //--- значения цен закрытия баров 1х и 2х минут назад prevClose_0=GetPriceClose( Symbol (),TimeframeRSI,shift_0); prevClose_1=GetPriceClose( Symbol (),TimeframeRSI,shift_1); } Comment ( "\nТекущее время: " , TimeCurrent (), "\nВремя " ,minutesBefore, " минут назад: " , TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 ), "\nБар " ,tf, "_0=" ,shift_0, ", бар " ,tf, "_1=" ,shift_1, "\nМинуты текущего времени: " ,server_time.min, "\nЗначение RSI " ,minutesBefore, " минут назад на " ,tf, " : " , DoubleToString (prevRSIvalue0, 4 ), "\nЗначение RSI " ,minutesBefore* 2 , " минут назад на " ,tf, " : " , DoubleToString (prevRSIvalue1, 4 ), //--- "\nЗначение Close " ,minutesBefore, " минут назад > " ,tf, " : " , DoubleToString (prevClose_0, Digits ()), "\nЗначение Close " ,minutesBefore* 2 , " минут назад > " ,tf, " : " , DoubleToString (prevClose_1, Digits ()) ); } //+------------------------------------------------------------------+ double GetLastDataRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int period_rsi= 14 , ENUM_APPLIED_PRICE price_rsi= PRICE_CLOSE ) { return ( iRSI (symbol_name,timeframe,period_rsi,price_rsi,shift)); } //+------------------------------------------------------------------+ double GetPriceClose( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){ double array[ 1 ]; if ( CopyClose (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]); return (- 1 ); } //+------------------------------------------------------------------+ int GetBarShift( string symbol_name, ENUM_TIMEFRAMES timeframe, datetime time) { if (time< 0 ) return (- 1 ); //--- datetime array[], time0; if ( CopyTime (symbol_name,timeframe, 0 , 1 ,array)< 0 ) return (- 1 ); time0=array[ 0 ]; if ( CopyTime (symbol_name,timeframe,time0,time,array)< 0 ) return (- 1 ); datetime temptime=GetTime(symbol_name,timeframe, ArraySize (array)- 1 ); if (array[ 0 ]==temptime && temptime<=time) return ( ArraySize (array)- 1 ); elsereturn ( ArraySize (array)); } //+------------------------------------------------------------------+ datetime GetTime( string symbol_name, ENUM_TIMEFRAMES timeframe, int bar) { if (bar< 0 ) return (- 1 ); datetime array[]; if ( CopyTime (symbol_name,timeframe,bar, 1 ,array)> 0 ) return (array[ 0 ]); return (- 1 ); } //+------------------------------------------------------------------+
이제 적시에 RSI에 대한 데이터 수신을 별도의 기능으로 정렬하고 가격과 RSI 값을 비교해야 합니다.
그러나 단계별로 수행하는 방법은 무엇입니까? ..... 그래픽 개체 (무엇이며 어떻게 넣을 것인지), 차트에 데이터가있는 레이블 표시 (입력할 위치 및 데이터 포함) ...... 어리석은 질문 죄송합니다.
프로그래밍 방식으로.
필요한 데이터로 정보 표시기를 작성해야 합니다.
또한 RSI가 20분 전에 레벨을 넘었다면 가격을 확인합니다. 매우 감사합니다. 모든 것이 나와 함께 작동한다면 약속))
가능한 한 MQL5에 가깝게 하기 때문에 시간의 막대 이동을 얻고 종가 를 얻기 위해 MQL4 함수를 사용하지 않습니다(각각 iBarShift() 및 iClose()).
이를 위해 GetBarShift() 및 GetPriceClose()와 같은 자체 함수를 만듭니다. 또한 표준 MQL4 함수를 포기하기 때문에 iTime() 대신 GetTime() 함수를 사용하여 막대 시간을 가져와야 합니다.
테스트 어드바이저는 다음과 같습니다.
//| exTestValueRSI.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15 ; // Таймфрейм RSI
input int PeriodRSI = 14 ; // Период расчёта RSI
input ENUM_APPLIED_PRICE PriceRSI = PRICE_CLOSE ; // Цена расчёта RSI
input int MinutesBefore = 20 ; // Количество минут назад
//--- global variables
int minutesBefore; // Количество минут назад
int periodRSI; // Период расчёта RSI
//---
double prevRSIvalue0; // Значение RSI для заданного тф xxx минут назад
double prevRSIvalue1; // Значение RSI для заданного тф xxx минут назад-x минут
//---
double prevClose_0; // Значение Close для заданного тф xxx минут назад
double prevClose_1; // Значение Close для заданного тф xxx минут назад-x минут
//---
datetime timeBefore; // Время ххх минут назад
datetime timePrevBefore; // Время ххх минут назад-x минут
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore); // Количество минут назад
periodRSI=(PeriodRSI< 1 ? 1 :PeriodRSI);
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
int shift_0;
int shift_1;
//---
MqlDateTime server_time;
TimeToStruct ( TimeCurrent (),server_time);
string tf= EnumToString (TimeframeRSI);
//--- если значение минут серверного времени кратно заданному значению, в частности 20-ти минутам или равно 0
if (server_time.min%minutesBefore== 0 || server_time.min== 0 ) {
//--- время 1x и 2x минут назад
timeBefore= TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 );
timePrevBefore= TimeCurrent ()- 2 *minutesBefore* PeriodSeconds ( PERIOD_M1 );
//--- смещение в барах времени 1х и 2х для заданного таймфрейма RSI (тф М15)
shift_0=GetBarShift( Symbol (),TimeframeRSI,timeBefore);
shift_1=GetBarShift( Symbol (),TimeframeRSI,timePrevBefore);
//--- значения RSI на барах 1х и 2х минут назад для заданного таймфрейма RSI (тф М15)
prevRSIvalue0=GetLastDataRSI( Symbol (),TimeframeRSI,shift_0);
prevRSIvalue1=GetLastDataRSI( Symbol (),TimeframeRSI,shift_1);
//--- значения цен закрытия баров 1х и 2х минут назад
prevClose_0=GetPriceClose( Symbol (),TimeframeRSI,shift_0);
prevClose_1=GetPriceClose( Symbol (),TimeframeRSI,shift_1);
}
Comment ( "\nТекущее время: " , TimeCurrent (),
"\nВремя " ,minutesBefore, " минут назад: " , TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 ),
"\nБар " ,tf, "_0=" ,shift_0, ", бар " ,tf, "_1=" ,shift_1,
"\nМинуты текущего времени: " ,server_time.min,
"\nЗначение RSI " ,minutesBefore, " минут назад на " ,tf, " : " , DoubleToString (prevRSIvalue0, 4 ),
"\nЗначение RSI " ,minutesBefore* 2 , " минут назад на " ,tf, " : " , DoubleToString (prevRSIvalue1, 4 ),
//---
"\nЗначение Close " ,minutesBefore, " минут назад > " ,tf, " : " , DoubleToString (prevClose_0, Digits ()),
"\nЗначение Close " ,minutesBefore* 2 , " минут назад > " ,tf, " : " , DoubleToString (prevClose_1, Digits ())
);
}
//+------------------------------------------------------------------+
double GetLastDataRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int period_rsi= 14 , ENUM_APPLIED_PRICE price_rsi= PRICE_CLOSE ) {
return ( iRSI (symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
double GetPriceClose( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[ 1 ];
if ( CopyClose (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]);
return (- 1 );
}
//+------------------------------------------------------------------+
int GetBarShift( string symbol_name, ENUM_TIMEFRAMES timeframe, datetime time) {
if (time< 0 ) return (- 1 );
//---
datetime array[], time0;
if ( CopyTime (symbol_name,timeframe, 0 , 1 ,array)< 0 ) return (- 1 );
time0=array[ 0 ];
if ( CopyTime (symbol_name,timeframe,time0,time,array)< 0 ) return (- 1 );
datetime temptime=GetTime(symbol_name,timeframe, ArraySize (array)- 1 );
if (array[ 0 ]==temptime && temptime<=time) return ( ArraySize (array)- 1 );
else return ( ArraySize (array));
}
//+------------------------------------------------------------------+
datetime GetTime( string symbol_name, ENUM_TIMEFRAMES timeframe, int bar) {
if (bar< 0 ) return (- 1 );
datetime array[];
if ( CopyTime (symbol_name,timeframe,bar, 1 ,array)> 0 ) return (array[ 0 ]);
return (- 1 );
}
//+------------------------------------------------------------------+
이제 적시에 RSI에 대한 데이터 수신을 별도의 기능으로 정렬하고 가격과 RSI 값을 비교해야 합니다.
가능한 한 MQL5에 가깝게 하기 때문에 시간의 막대 이동을 얻고 종가 를 얻기 위해 MQL4 함수를 사용하지 않습니다(각각 iBarShift() 및 iClose()).
이를 위해 GetBarShift() 및 GetPriceClose()와 같은 자체 함수를 만듭니다. 또한 표준 MQL4 함수를 포기하기 때문에 iTime() 대신 GetTime() 함수를 사용하여 막대 시간을 가져와야 합니다.
테스트 어드바이저는 다음과 같습니다.
//| exTestValueRSI.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15 ; // Таймфрейм RSI
input int PeriodRSI = 14 ; // Период расчёта RSI
input ENUM_APPLIED_PRICE PriceRSI = PRICE_CLOSE ; // Цена расчёта RSI
input int MinutesBefore = 20 ; // Количество минут назад
//--- global variables
int minutesBefore; // Количество минут назад
int periodRSI; // Период расчёта RSI
//---
double prevRSIvalue0; // Значение RSI для заданного тф xxx минут назад
double prevRSIvalue1; // Значение RSI для заданного тф xxx минут назад-x минут
//---
double prevClose_0; // Значение Close для заданного тф xxx минут назад
double prevClose_1; // Значение Close для заданного тф xxx минут назад-x минут
//---
datetime timeBefore; // Время ххх минут назад
datetime timePrevBefore; // Время ххх минут назад-x минут
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore); // Количество минут назад
periodRSI=(PeriodRSI< 1 ? 1 :PeriodRSI);
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
int shift_0;
int shift_1;
//---
MqlDateTime server_time;
TimeToStruct ( TimeCurrent (),server_time);
string tf= EnumToString (TimeframeRSI);
//--- если значение минут серверного времени кратно заданному значению, в частности 20-ти минутам или равно 0
if (server_time.min%minutesBefore== 0 || server_time.min== 0 ) {
//--- время 1x и 2x минут назад
timeBefore= TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 );
timePrevBefore= TimeCurrent ()- 2 *minutesBefore* PeriodSeconds ( PERIOD_M1 );
//--- смещение в барах времени 1х и 2х для заданного таймфрейма RSI (тф М15)
shift_0=GetBarShift( Symbol (),TimeframeRSI,timeBefore);
shift_1=GetBarShift( Symbol (),TimeframeRSI,timePrevBefore);
//--- значения RSI на барах 1х и 2х минут назад для заданного таймфрейма RSI (тф М15)
prevRSIvalue0=GetLastDataRSI( Symbol (),TimeframeRSI,shift_0);
prevRSIvalue1=GetLastDataRSI( Symbol (),TimeframeRSI,shift_1);
//--- значения цен закрытия баров 1х и 2х минут назад
prevClose_0=GetPriceClose( Symbol (),TimeframeRSI,shift_0);
prevClose_1=GetPriceClose( Symbol (),TimeframeRSI,shift_1);
}
Comment ( "\nТекущее время: " , TimeCurrent (),
"\nВремя " ,minutesBefore, " минут назад: " , TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 ),
"\nБар " ,tf, "_0=" ,shift_0, ", бар " ,tf, "_1=" ,shift_1,
"\nМинуты текущего времени: " ,server_time.min,
"\nЗначение RSI " ,minutesBefore, " минут назад на " ,tf, " : " , DoubleToString (prevRSIvalue0, 4 ),
"\nЗначение RSI " ,minutesBefore* 2 , " минут назад на " ,tf, " : " , DoubleToString (prevRSIvalue1, 4 ),
//---
"\nЗначение Close " ,minutesBefore, " минут назад > " ,tf, " : " , DoubleToString (prevClose_0, Digits ()),
"\nЗначение Close " ,minutesBefore* 2 , " минут назад > " ,tf, " : " , DoubleToString (prevClose_1, Digits ())
);
}
//+------------------------------------------------------------------+
double GetLastDataRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int period_rsi= 14 , ENUM_APPLIED_PRICE price_rsi= PRICE_CLOSE ) {
return ( iRSI (symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
double GetPriceClose( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[ 1 ];
if ( CopyClose (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]);
return (- 1 );
}
//+------------------------------------------------------------------+
int GetBarShift( string symbol_name, ENUM_TIMEFRAMES timeframe, datetime time) {
if (time< 0 ) return (- 1 );
//---
datetime array[], time0;
if ( CopyTime (symbol_name,timeframe, 0 , 1 ,array)< 0 ) return (- 1 );
time0=array[ 0 ];
if ( CopyTime (symbol_name,timeframe,time0,time,array)< 0 ) return (- 1 );
datetime temptime=GetTime(symbol_name,timeframe, ArraySize (array)- 1 );
if (array[ 0 ]==temptime && temptime<=time) return ( ArraySize (array)- 1 );
else return ( ArraySize (array));
}
//+------------------------------------------------------------------+
datetime GetTime( string symbol_name, ENUM_TIMEFRAMES timeframe, int bar) {
if (bar< 0 ) return (- 1 );
datetime array[];
if ( CopyTime (symbol_name,timeframe,bar, 1 ,array)> 0 ) return (array[ 0 ]);
return (- 1 );
}
//+------------------------------------------------------------------+
이제 적시에 RSI에 대한 데이터 수신을 별도의 기능으로 정렬하고 가격과 RSI 값을 비교해야 합니다.
{
ticket= OrderSend ( Symbol (), OP_SELL , 0.1 , Ask , Slippage, 0 , 0 , NULL , Magic, 0 , Blue);
return ( 0 );
}
{
int ticket;
if ( OrdersTotal () == 0 )
{
ticket= OrderSend ( Symbol (), OP_SELL , 1 , Bid , 0 , 0 , 0 , NULL , 1234 , 0 , Red);
}
return ( 0 );
}
코드 끝을 확인하기 위해 다음을 삽입했습니다.
{
int ticket;
if ( OrdersTotal () == 0 )
{
ticket= OrderSend ( Symbol (), OP_SELL , 1 , Bid , 0 , 0 , 0 , NULL , 1234 , 0 , Red);
}
return ( 0 );
}
오류 코드 가 표시되지 않는 이유는 무엇입니까?
오류 코드 가 표시되지 않는 이유는 무엇입니까?
친애하는 포럼 사용자! 질문은 ~이야:
틱 블록에서 가능합니까?
정수 시작() {}
실행될 때 모든 변수의 값을 수동으로 설정할 수 있는 창을 표시하는 이벤트를 만듭니다.
Extern 을 통해 변수를 설정할 때 발생하는 것과 거의 같지만 프로그램 실행 중에 자동으로 발생하며 시작 시에는 한 번도 발생하지 않습니다.
어느 쪽을 파야 하는지 최소한 알려주시면 감사하겠습니다.
고맙습니다!
친애하는 포럼 사용자! 질문은 ~이야:
틱 블록에서 가능합니까?
정수 시작() {}
실행될 때 모든 변수의 값을 수동으로 설정할 수 있는 창을 표시하는 이벤트를 만듭니다.
Extern 을 통해 변수를 설정할 때 발생하는 것과 거의 같지만 프로그램 실행 중에 자동으로 발생하며 시작 시에는 한 번도 발생하지 않습니다.
어느 쪽을 파야 하는지 최소한 알려주시면 감사하겠습니다.
고맙습니다!
친애하는 포럼 사용자! 질문은 ~이야:
틱 블록에서 가능합니까?
정수 시작() {}
실행될 때 모든 변수의 값을 수동으로 설정할 수 있는 창을 표시하는 이벤트를 만듭니다.
Extern 을 통해 변수를 설정할 때 발생하는 것과 거의 같지만 프로그램 실행 중에 자동으로 발생하며 시작 시에는 한 번도 발생하지 않습니다.
어느 쪽을 파야 하는지 최소한 알려주시면 감사하겠습니다.
고맙습니다!
그래픽 개체를 탐색합니다. 특히 입력 필드 - OBJ_EDIT
차트에 생성하는 기능은 다음과 같습니다.
void SetEditField( const long chart_id= 0 , // ID графика
const string name= "Edit" , // имя объекта
const int sub_window= 0 , // номер подокна
const int x= 0 , // координата по оси X
const int y= 0 , // координата по оси Y
const int width= 50 , // ширина поля ввода
const int height= 18 , // высота поля ввода
const string text= "Text" , // текст
const string font= "Calibri" , // шрифт
const int font_size= 8 , // размер шрифта
const ENUM_ALIGN_MODE align= ALIGN_CENTER , // способ выравнивания
const ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER , // угол графика для привязки
const long z_order= 0 , // приоритет на нажатие мышью
const color clr= clrBlack , // цвет текста
const color back_clr= clrWhite , // цвет фона
const color border_clr= clrNONE , // цвет границы
const bool back= false , // на заднем плане
const bool read_only= false , // возможность редактировать
const bool selection= false , // выделить для перемещений
const bool hidden= true ) // скрыт в списке объектов
{
if ( ObjectFind (chart_id,name)< 0 ) ObjectCreate (chart_id,name, OBJ_EDIT ,sub_window, 0 , 0 );
ObjectSetInteger (chart_id,name, OBJPROP_XDISTANCE ,x);
ObjectSetInteger (chart_id,name, OBJPROP_YDISTANCE ,y);
ObjectSetInteger (chart_id,name, OBJPROP_XSIZE ,width);
ObjectSetInteger (chart_id,name, OBJPROP_YSIZE ,height);
ObjectSetString (chart_id,name, OBJPROP_TEXT ,text);
ObjectSetString (chart_id,name, OBJPROP_FONT ,font);
ObjectSetInteger (chart_id,name, OBJPROP_FONTSIZE ,font_size);
ObjectSetInteger (chart_id,name, OBJPROP_ALIGN ,align);
ObjectSetInteger (chart_id,name, OBJPROP_READONLY ,read_only);
ObjectSetInteger (chart_id,name, OBJPROP_CORNER ,corner);
ObjectSetInteger (chart_id,name, OBJPROP_COLOR ,clr);
ObjectSetInteger (chart_id,name, OBJPROP_BGCOLOR ,back_clr);
ObjectSetInteger (chart_id,name, OBJPROP_BORDER_COLOR ,border_clr);
ObjectSetInteger (chart_id,name, OBJPROP_BACK ,back);
ObjectSetInteger (chart_id,name, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger (chart_id,name, OBJPROP_SELECTED ,selection);
ObjectSetInteger (chart_id,name, OBJPROP_HIDDEN ,hidden);
ObjectSetInteger (chart_id,name, OBJPROP_ZORDER ,z_order);
}
//+------------------------------------------------------------------+