//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+
//+------------------------------------------------------------------+ 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()を独自に使用しています。また、MQL4標準の関数を拒否しているので、iTime()の代わりにGetTime()関数でバータイムを取得する必要があります。
ここでは、Expert Advisorをテストします。
//| 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()関数でバータイムを取得する必要があります。
ここでは、Expert Advisorをテストします。
//| 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);
}
//+------------------------------------------------------------------+