新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 138 1...131132133134135136137138139140141142143144145...1953 新评论 Alexey Viktorov 2017.03.04 08:51 #1371 missha689: 告诉我如何查出昨天的日期和时间好吧,这里面有你需要的一切,只要读一读。比如这个。iTime("USDCHF",PERIOD_H1,0) 只要用_符号、PERIOD_H1到PERIOD_D1替换指定的符号,这里就有一天的开盘时间。用1代替0,得到昨天的开放时间。 Maxim Kuznetsov 2017.03.04 09:45 #1372 missha689: 你能告诉我如何以编程方式找出昨天的日期和时间吗?昨天的日历。 datetime tim=TimeCurrent()-24*60*60;MqlDateTime ts;TimeToStruct(tim,ts);ts.hour=0;ts.min=0;ts.sec=0;tim=StructToTime(ts);现在是时间--昨天的日历日开始(!!不是酒吧前D1的开放时间)。酒吧前的开放时间D1 - iTime(0,PERIOD_D1,1); 有一个小的修正 - 如果是星期六,则加24小时,如果是星期天,则加48小时。 missha689 2017.03.04 10:28 #1373 Alexey Viktorov:它有你需要的一切,只需阅读它。比如这个。iTime("USDCHF",PERIOD_H1,0) 只要用_符号、PERIOD_H1到PERIOD_D1替换指定的符号,这里就有一天的开盘时间。用1代替0,得到昨天的开放时间。我从昨天开始就一直想弄清楚怎么做,但我做不到,所以我请求帮助,因为我是新手。请帮助我找到昨天15:00的条形图的指数和今天7:00的条形图的指数,而不需要像例子中那样明确指定日期。 missha689 2017.03.04 10:57 #1374 Maxim Kuznetsov:昨天的日历。 datetime tim=TimeCurrent()-24*60*60;MqlDateTime ts;TimeToStruct(tim,ts);ts.hour=0;ts.min=0;ts.sec=0;tim=StructToTime(ts);现在是时间--昨天的日历日开始(!!!不是D1前的开放时间)。酒吧前的开放时间D1 - iTime(0,PERIOD_D1,1); 有一个小的修正 - 如果是星期六就加24小时,如果是星期天就加48小时。 谢谢你 FOTOGRAF14 2017.03.04 15:33 #1375 Sergey Gritsay: 函数将止损带转为无损,订单票 和点位距离被传递给函数void zero_profit(int ticket, int distance) { double sl=0.0; if(OrderSelect(ticket,SELECT_BY_TICKET)) { if(OrderType()==OP_BUY) { if(Bid>=OrderOpenPrice() && Bid-OrderOpenPrice()>=distance*_Point) sl=OrderOpenPrice(); if(OrderStopLoss()!=0 && OrderStopLoss()>=OrderOpenPrice())return; } if(OrderType()==OP_SELL) { if(Ask<=OrderOpenPrice() && OrderOpenPrice()-Ask>=distance*_Point) sl=OrderOpenPrice(); if(OrderStopLoss()!=0 && OrderStopLoss()<=OrderOpenPrice())return; } ResetLastError(); if(sl<=0)return; if(!OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0)) { int error=GetLastError(); rezult=StringConcatenate(OrderSymbol(),": error modifying StopLoss order ",OrderTicket()," ",TypeToStr(OrderType())," №- ",error); Print(rezult); } } }...谢谢sergey!!!!! Artyom Trishkin 2017.03.04 20:09 #1376 Vitaly Muzichenko:很好,我将尝试把这些功能拉到EA中。我稍后将公布结果。谢谢!!!。增加了第二个搜索方法。//+------------------------------------------------------------------+//| iFreeNumFractals.mq4 |//| Copyright 2017, Artem A. Trishkin, Skype artmedia70 |//| https://login.mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright "Copyright 2017, Artem A. Trishkin, Skype artmedia70"#property link "https://login.mql5.com/ru/users/artmedia70"#property version "3.00"#property strict#property indicator_chart_window#property indicator_buffers 2#property indicator_plots 2//--- plot UpperFractal#property indicator_label1 "Upper Fractal"#property indicator_type1 DRAW_ARROW#property indicator_color1 clrRed#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- plot LowerFractal#property indicator_label2 "Lower Fractal"#property indicator_type2 DRAW_ARROW#property indicator_color2 clrSteelBlue#property indicator_style2 STYLE_SOLID#property indicator_width2 1//---enum ENUM_TYPE_FRACTAL { TYPE_FRACTAL_ACCURATE = 0, // Accurate fractal TYPE_FRACTAL_INACCURATE = 1, // Inaccurate fractal };//--- input parametersinput ENUM_TYPE_FRACTAL TypeFractals = TYPE_FRACTAL_ACCURATE; // Type of fractalinput int LeftNumUp = 2; // The number of bars on the left for upper fractalsint leftNumUp; // Количество баров слева для верхнего фракталаinput int RightNumUp = 2; // The number of bars on the right for upper fractalsint rightNumUp; // Количество баров справа для верхнего фракталаinput int LeftNumDn = 2; // The number of bars on the left for lower fractalsint leftNumDn; // Количество баров слева для нижнего фракталаinput int RightNumDn = 2; // The number of bars on the right for lower fractalsint rightNumDn; // Количество баров справа для нижнего фрактала//--- indicator buffersdouble BufferUpperFractal[];double BufferLowerFractal[];//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit() {//--- indicator buffers mapping SetIndexBuffer(0,BufferUpperFractal); SetIndexBuffer(1,BufferLowerFractal);//--- setting a code from the Wingdings charset as the property of PLOT_ARROW PlotIndexSetInteger(0,PLOT_ARROW,217); PlotIndexSetInteger(1,PLOT_ARROW,218); SetIndexArrow(0,217); SetIndexArrow(1,218); SetIndexEmptyValue(0,EMPTY_VALUE); SetIndexEmptyValue(1,EMPTY_VALUE);//--- leftNumUp=(LeftNumUp<1?1:LeftNumUp); rightNumUp=(RightNumUp<1?1:RightNumUp); leftNumDn=(LeftNumDn<1?1:LeftNumDn); rightNumDn=(RightNumDn<1?1:RightNumDn); string short_name=MQLInfoString(MQL_PROGRAM_NAME)+"("+(string)leftNumUp+","+(string)rightNumUp+")("+(string)leftNumDn+","+(string)rightNumDn+")"; IndicatorSetString(INDICATOR_SHORTNAME,short_name); IndicatorSetInteger(INDICATOR_DIGITS,Digits());//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) {//--- if(rates_total<fmax(leftNumUp+rightNumUp,leftNumDn+rightNumDn)) return(0); int limit=rates_total-prev_calculated; if(limit>0) { ArrayInitialize(BufferUpperFractal,0.0); ArrayInitialize(BufferUpperFractal,0.0); limit=rates_total-fmax(leftNumUp,leftNumDn)-1; } //--- for(int i=limit; i>fmin(rightNumUp,rightNumDn); i--) { if(GetFreeUpperFractal(Symbol(),PERIOD_CURRENT,i,leftNumUp,rightNumUp)>0) BufferUpperFractal[i]=high[i]; if(GetFreeLowerFractal(Symbol(),PERIOD_CURRENT,i,leftNumDn,rightNumDn)>0) BufferLowerFractal[i]=low[i]; }//--- return value of prev_calculated for next call return(rates_total); }//+----------------------------------------------------------------------------+double GetFreeLowerFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) { int bars=Bars(symbol_name,timeframe); if(left_dimension<1) left_dimension=1; if(right_dimension<1) right_dimension=1; if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1); if(TypeFractals==TYPE_FRACTAL_ACCURATE) { for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,i+1)) return(-1); for(int i=shift+1; i<=shift+left_dimension; i++) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,i-1)) return(-1); } else { for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,shift)) return(-1); for(int i=shift+1; i<=shift+left_dimension; i++) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,shift)) return(-1); } return(GetPriceLow(symbol_name,timeframe,shift));} //+----------------------------------------------------------------------------+double GetFreeUpperFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) { int bars=Bars(symbol_name,timeframe); if(left_dimension<1) left_dimension=1; if(right_dimension<1) right_dimension=1; if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1); if(TypeFractals==TYPE_FRACTAL_ACCURATE) { for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,i+1)) return(-1); for(int i=shift+1; i<=shift+left_dimension; i++) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,i-1)) return(-1); } else { for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,shift)) return(-1); for(int i=shift+1; i<=shift+left_dimension; i++) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,shift)) return(-1); } return(GetPriceHigh(symbol_name,timeframe,shift));} //+----------------------------------------------------------------------------+double GetPriceHigh(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){ double array[1]; if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]); return(-1);}//+----------------------------------------------------------------------------+double GetPriceLow(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){ double array[1]; if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]); return(-1);}//+----------------------------------------------------------------------------+ 附加的文件: iFreeNumFractals.mq4 15 kb Any questions from newcomers 初学者的问题 MQL5 MT5 MetaTrader Questions from Beginners MQL5 Vitaly Muzichenko 2017.03.04 20:53 #1377 Artyom Trishkin:增加了第二个搜索方法。谢谢你,这实在是太好了。剩余部分将被上传到kodobase) Artyom Trishkin 2017.03.04 21:27 #1378 Vitaly Muzichenko:谢谢你,只是一切都很好。剩余部分将被上传到kodobase) 已经完成:)))把它送去测试了。 DVlad 2017.03.05 06:31 #1379 你好。我用的是linux系统。我在MT4中打开了几个货币对--多达10个。我如何使用MQL4将图表标签按一定的顺序排列?使用配置文件,研究1_MQL4.pdf和互联网,都没有发现任何结果。问候,Vladimir Artyom Trishkin 2017.03.05 07:15 #1380 DVlad:你好。我用的是linux系统。我在MT4中打开了几个货币对--多达10个。我如何使用MQL4将图表标签按一定的顺序排列?使用配置文件,研究1_MQL4.pdf和互联网都没有显示出任何结果。问候,弗拉基米尔。即使在Windows上,也不能通过mql4对标签进行排序。你只能按你需要的顺序打开图表,并在其上设置必要的模板。 1...131132133134135136137138139140141142143144145...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
告诉我如何查出昨天的日期和时间
好吧,这里面有你需要的一切,只要读一读。比如这个。
你能告诉我如何以编程方式找出昨天的日期和时间吗?
昨天的日历。
datetime tim=TimeCurrent()-24*60*60;
MqlDateTime ts;
TimeToStruct(tim,ts);
ts.hour=0;ts.min=0;ts.sec=0;
tim=StructToTime(ts);
现在是时间--昨天的日历日开始(!!不是酒吧前D1的开放时间)。
酒吧前的开放时间D1 - iTime(0,PERIOD_D1,1); 有一个小的修正 - 如果是星期六,则加24小时,如果是星期天,则加48小时。
它有你需要的一切,只需阅读它。比如这个。
我从昨天开始就一直想弄清楚怎么做,但我做不到,所以我请求帮助,因为我是新手。
请帮助我找到昨天15:00的条形图的指数和今天7:00的条形图的指数,而不需要像例子中那样明确指定日期。
昨天的日历。
datetime tim=TimeCurrent()-24*60*60;
MqlDateTime ts;
TimeToStruct(tim,ts);
ts.hour=0;ts.min=0;ts.sec=0;
tim=StructToTime(ts);
现在是时间--昨天的日历日开始(!!!不是D1前的开放时间)。
酒吧前的开放时间D1 - iTime(0,PERIOD_D1,1); 有一个小的修正 - 如果是星期六就加24小时,如果是星期天就加48小时。
函数将止损带转为无损,订单票 和点位距离被传递给函数
{
double sl=0.0;
if(OrderSelect(ticket,SELECT_BY_TICKET))
{
if(OrderType()==OP_BUY)
{
if(Bid>=OrderOpenPrice() && Bid-OrderOpenPrice()>=distance*_Point) sl=OrderOpenPrice();
if(OrderStopLoss()!=0 && OrderStopLoss()>=OrderOpenPrice())return;
}
if(OrderType()==OP_SELL)
{
if(Ask<=OrderOpenPrice() && OrderOpenPrice()-Ask>=distance*_Point) sl=OrderOpenPrice();
if(OrderStopLoss()!=0 && OrderStopLoss()<=OrderOpenPrice())return;
}
ResetLastError();
if(sl<=0)return;
if(!OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0))
{
int error=GetLastError();
rezult=StringConcatenate(OrderSymbol(),": error modifying StopLoss order ",OrderTicket()," ",TypeToStr(OrderType())," №- ",error);
Print(rezult);
}
}
}
...谢谢sergey!!!!!
很好,我将尝试把这些功能拉到EA中。我稍后将公布结果。
谢谢!!!。
增加了第二个搜索方法。
//| iFreeNumFractals.mq4 |
//| Copyright 2017, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "3.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UpperFractal
#property indicator_label1 "Upper Fractal"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot LowerFractal
#property indicator_label2 "Lower Fractal"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrSteelBlue
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//---
enum ENUM_TYPE_FRACTAL
{
TYPE_FRACTAL_ACCURATE = 0, // Accurate fractal
TYPE_FRACTAL_INACCURATE = 1, // Inaccurate fractal
};
//--- input parameters
input ENUM_TYPE_FRACTAL TypeFractals = TYPE_FRACTAL_ACCURATE; // Type of fractal
input int LeftNumUp = 2; // The number of bars on the left for upper fractals
int leftNumUp; // Количество баров слева для верхнего фрактала
input int RightNumUp = 2; // The number of bars on the right for upper fractals
int rightNumUp; // Количество баров справа для верхнего фрактала
input int LeftNumDn = 2; // The number of bars on the left for lower fractals
int leftNumDn; // Количество баров слева для нижнего фрактала
input int RightNumDn = 2; // The number of bars on the right for lower fractals
int rightNumDn; // Количество баров справа для нижнего фрактала
//--- indicator buffers
double BufferUpperFractal[];
double BufferLowerFractal[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,BufferUpperFractal);
SetIndexBuffer(1,BufferLowerFractal);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,217);
PlotIndexSetInteger(1,PLOT_ARROW,218);
SetIndexArrow(0,217);
SetIndexArrow(1,218);
SetIndexEmptyValue(0,EMPTY_VALUE);
SetIndexEmptyValue(1,EMPTY_VALUE);
//---
leftNumUp=(LeftNumUp<1?1:LeftNumUp);
rightNumUp=(RightNumUp<1?1:RightNumUp);
leftNumDn=(LeftNumDn<1?1:LeftNumDn);
rightNumDn=(RightNumDn<1?1:RightNumDn);
string short_name=MQLInfoString(MQL_PROGRAM_NAME)+"("+(string)leftNumUp+","+(string)rightNumUp+")("+(string)leftNumDn+","+(string)rightNumDn+")";
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if(rates_total<fmax(leftNumUp+rightNumUp,leftNumDn+rightNumDn)) return(0);
int limit=rates_total-prev_calculated;
if(limit>0) {
ArrayInitialize(BufferUpperFractal,0.0);
ArrayInitialize(BufferUpperFractal,0.0);
limit=rates_total-fmax(leftNumUp,leftNumDn)-1;
}
//---
for(int i=limit; i>fmin(rightNumUp,rightNumDn); i--) {
if(GetFreeUpperFractal(Symbol(),PERIOD_CURRENT,i,leftNumUp,rightNumUp)>0) BufferUpperFractal[i]=high[i];
if(GetFreeLowerFractal(Symbol(),PERIOD_CURRENT,i,leftNumDn,rightNumDn)>0) BufferLowerFractal[i]=low[i];
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+----------------------------------------------------------------------------+
double GetFreeLowerFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) {
int bars=Bars(symbol_name,timeframe);
if(left_dimension<1) left_dimension=1;
if(right_dimension<1) right_dimension=1;
if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1);
if(TypeFractals==TYPE_FRACTAL_ACCURATE) {
for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,i+1)) return(-1);
for(int i=shift+1; i<=shift+left_dimension; i++) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,i-1)) return(-1);
}
else {
for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,shift)) return(-1);
for(int i=shift+1; i<=shift+left_dimension; i++) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,shift)) return(-1);
}
return(GetPriceLow(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetFreeUpperFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) {
int bars=Bars(symbol_name,timeframe);
if(left_dimension<1) left_dimension=1;
if(right_dimension<1) right_dimension=1;
if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1);
if(TypeFractals==TYPE_FRACTAL_ACCURATE) {
for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,i+1)) return(-1);
for(int i=shift+1; i<=shift+left_dimension; i++) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,i-1)) return(-1);
}
else {
for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,shift)) return(-1);
for(int i=shift+1; i<=shift+left_dimension; i++) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,shift)) return(-1);
}
return(GetPriceHigh(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetPriceHigh(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[1];
if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
return(-1);
}
//+----------------------------------------------------------------------------+
double GetPriceLow(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[1];
if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
return(-1);
}
//+----------------------------------------------------------------------------+
增加了第二个搜索方法。
谢谢你,这实在是太好了。
剩余部分将被上传到kodobase)
谢谢你,只是一切都很好。
剩余部分将被上传到kodobase)
你好。
我用的是linux系统。我在MT4中打开了几个货币对--多达10个。我如何使用MQL4将图表标签按一定的顺序排列?
使用配置文件,研究1_MQL4.pdf和互联网,都没有发现任何结果。
问候,Vladimir
你好。
我用的是linux系统。我在MT4中打开了几个货币对--多达10个。我如何使用MQL4将图表标签按一定的顺序排列?
使用配置文件,研究1_MQL4.pdf和互联网都没有显示出任何结果。
问候,弗拉基米尔。
即使在Windows上,也不能通过mql4对标签进行排序。
你只能按你需要的顺序打开图表,并在其上设置必要的模板。