//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+
//+------------------------------------------------------------------+ //| 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值
然后像这样?
if (prevRSIvalue1<70 && (prevRSIvalue0>70) && (prevClose_0>Bid))
//+------------------------------------------------------------------+ void SetEditField(constlong chart_id=0, // ID графика conststring name="Edit", // имя объекта constint sub_window=0, // номер подокна constint x=0, // координата по оси X constint y=0, // координата по оси Y constint width=50, // ширина поля ввода constint height=18, // высота поля ввода conststring text="Text", // текст conststring font="Calibri", // шрифт constint font_size=8, // размер шрифта constENUM_ALIGN_MODE align=ALIGN_CENTER, // способ выравнивания constENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки constlong z_order=0, // приоритет на нажатие мышью constcolor clr=clrBlack, // цвет текста constcolor back_clr=clrWhite, // цвет фона constcolor border_clr=clrNONE, // цвет границы constbool back=false, // на заднем плане constbool read_only=false, // возможность редактировать constbool selection=false, // выделить для перемещений constbool 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); } //+------------------------------------------------------------------+
但如何一步一步地做呢?..... 图形对象(它们是什么,怎么放),把数据标签放在图上(在哪里输入,用什么数据)...... 对不起,我的问题很愚蠢。
软件。
你需要用你想要的数据编写一个信息指标。
接下来,如果RSI在20分钟前越过该水平,我们就检查价格,即要做空,价格应该低于20分钟前。非常感谢你。如果成功了,我欠你一个承诺))
由于我们创建它时最大限度地接近MQL5,所以我们不会使用MQL4函数来获取按时间和收盘价 的条形移动(分别为iBarShift()和iClose())。
我们为此做了自己的函数:GetBarShift()和GetPriceClose()。此外,我们将需要使用GetTime()函数而不是iTime()来获得酒吧时间,因为我们拒绝使用标准的MQL4函数。
这里有一个测试的专家顾问。
//| 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()。此外,我们将需要使用GetTime()函数而不是iTime()来获得酒吧时间,因为我们拒绝使用标准的MQL4函数。
这里有一个测试的专家顾问。
//| 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);
}
谁在阻止你显示错误代码?
谁在阻止你显示错误代码?
亲爱的论坛用户,我的问题是这样的。
是否有可能在打勾块中
int start() {}
创建一个事件,执行后将显示一个弹出式窗口,你可以在其中手动设置一个变量的值。
这类似于你通过Extern 设置变量时发生的情况,但在程序执行 过程中自动进行,而不是在启动时一次。
如果你至少能告诉我该往哪边挖,我将非常感激。
谢谢你!
亲爱的论坛用户,我的问题是这样的。
是否有可能在打勾块中
int start() {}
创建一个事件,执行后将显示一个弹出式窗口,你可以在其中手动设置一个变量的值。
这类似于你通过Extern 设置变量时发生的情况,但在程序执行 过程中自动进行,而不是在启动时一次。
如果你至少能告诉我该往哪边挖,我将非常感激。
谢谢你!
亲爱的论坛用户,问题是这样的。
是否有可能在打勾块中
int start() {}
创建一个事件,执行后将显示一个弹出式窗口,你可以在其中手动设置一个变量的值。
这类似于你用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);
}
//+------------------------------------------------------------------+