初学者的问题 MQL4 MT4 MetaTrader 4 - 页 114 1...107108109110111112113114115116117118119120121...260 新评论 Konstantin Erin 2018.02.05 10:12 #1131 Rewerpool: 下午好!我如何创建一个触发器? 例如,我需要这个条件if(iClose(NULL,HTF,4)<BlueLine)如果它被执行 DayDown = 1 !问:如何将DayDown设为1,并在第二天才轮询?int ДеньОпроса=0; void OnTick() { if(ДеньОпроса != Day()) // Если новый день - нужно опросить { if(iClose(NULL,HTF,4)<BlueLine) DayDown = 1; // Опрос ДеньОпроса = Day(); // Запомнить день } Rewerpool 2018.02.05 10:31 #1132 谢谢你!我会试着把它拧上)。 Dmitry Ivkin 2018.02.05 10:44 #1133 你好,请写下代码,条件是如果你从图表中删除1个对象,那么其余的(选择)将被删除。我有其他对象附在1个对象上,当你删除这个对象时,其他对象就会挂在图表上。 Rewerpool 2018.02.05 11:11 #1134 STARIJ: 我是这样想的。 如果(DayNext!= Day()) // 如果是新的一天,你必须进行投票。{// 投票如果(iClose(NULL,1440,2)<BlueLine)如果(iOpen(NULL,1440,1)<BlueLine &&iClose(NULL,HTF,1)>BlueLine)PROBOI1 = 1;Print("Closed above BlueLine = ",iClose(NULL,HTF,1))。如果(iClose(NULL,1440,2)>RedLine)如果(iOpen(NULL,1440,1)>RedLine &&iClose(NULL,HTF,1)<RedLine)PROBOI1 = -1;Print("Closed below RedLine = ",iClose(NULL,HTF,1))。DayNext = Day(); //记住这一天} 如果有什么不对的地方,请改正!此外,如果我想跟踪现在在较低的TF上发生的事情,我是否需要在调查之外写上Day?右边 -STARIJ。 如果(iClose(NULL,60,1)>RedLine&&iClose(NULL,1440,2)>RedLine) ) Sell = 1 Questions from Beginners MQL4 [存档!]免费撰写顾问文章 编码帮助 Dmitry Ivkin 2018.02.05 12:26 #1135 很抱歉这样做,但请回复。 https://www.mql5.com/ru/forum/226620#comment_6481536 novichok2018 2018.02.08 16:52 #1136 Vladimir Karputov:为条件1设置魔法数字+1,为条件2设置魔法数字+2,以此类推。这样你就可以看到这个仓位是以条件1还是以条件2建立的......下午。我只成功了一个位置BAY。卖出的魔法套装由于某种原因不能使用。一切都是完全相同的,当然除了魔术师之外。我做错了什么? int total=OrdersTotal(); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_BUY && (MathAbs(WPR1)<5)) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_BUY && OrderMagicNumber==111 && MathAbs(WPR1)<20) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_SELL && OrderMagicNumber==222 && MathAbs(WPR1)>97.55) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_SELL && MathAbs(WPR1)>96) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); } continue; } Igor Makanu 2018.02.08 18:43 #1137 novichok2018:我做错了什么? 我很抱歉没有找到通信的开头,但我想立即建议你避免在其中加入复杂的条件和计算--这使得代码无法阅读,从而使搜索逻辑错误变得复杂,我会这样写你的代码。 int total=OrdersTotal(); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(TimeCurrent()>OrderOpenTime()+100)&& OrderTicket()) { if(OrderType()==OP_BUY && (MathAbs(WPR1)<5)) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); if(OrderType()==OP_BUY && OrderMagicNumber==111 && MathAbs(WPR1)<20) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); if(OrderType()==OP_SELL && OrderMagicNumber==222 && MathAbs(WPR1)>97.55) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); if(OrderType()==OP_SELL && MathAbs(WPR1)>96) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); } } continue; }如果你明白我的意思,你可以再修改一下我给你的代码,我的意思是把它放在一个单独的条件中,如果(OrderType()==OP_BUY....) 那么,发现逻辑错误就会容易得多,我认为 novichok2018 2018.02.08 18:56 #1138 Igor Makanu:我很抱歉没有找到通信的开头,但我想立即建议避免在其中加入复杂的条件和计算--这使得代码不可读,并因此使搜索逻辑错误变得复杂,我会这样写你的代码。 如果你明白我的意思,你可以再修改一下我给你的代码,我的意思是把它放在一个单独的条件中,如果(OrderType()==OP_BUY....) 那么,发现逻辑错误就会容易得多,我认为明白了,谢谢,但据我所知,平台对代码的理解没有区别,而对我来说,把一个条件分成几个较短的条件,在搜索错误 时似乎更复杂,因为语句之间的出现次数会增加。但也许你是对的,我很快就会站到你这边来。关于代码逻辑--我没有发现我的和你的有什么不同,仍然没有看到错误。 Igor Makanu 2018.02.09 05:55 #1139 novichok2018:关于代码逻辑--我发现我的和你的没有区别,我还是没有看到错误。正是如此--代码的逻辑是一样的,但如果你把条件分割开来,就能更快地找到逻辑错误所在,在你的案例中,如果你把它拿出来。 if(TimeCurrent()>OrderOpenTime()+100)&& OrderTicket()) 变成一个单独的条件,我们可以得到代码优化--条件将被检查一次,而不是像你的例子中那样检查4次。 检查专家顾问日志中的输出,使用 Print() 用于记录,以查看哪些代码片段被执行,有哪些参数。 Vladimir Tkach 2018.02.09 06:06 #1140 伙计们。 如何读取专家顾问代码中的晨平指标? 我正在尝试这样做,但没有效果。 min=iCustom(Symbol(),0,"Morning Flat",StartHour,EndHour,TargetLevel,1,0); 该指标本身 //+------------------------------------------------------------------+ //| MorningFlat.mq4 | //| Scriptong | //| | //+------------------------------------------------------------------+ #property copyright "Scriptong" #property link "" #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Turquoise #property indicator_color2 Red #property indicator_color3 Gold #property indicator_color4 Silver extern int StartHour=0; extern int EndHour=8; extern double TargetLevel=161.8; extern color UpColor = Turquoise; extern color DnColor = Red; extern color TargetUpColor = Gold; extern color TargetDnColor = Silver; //---- buffers double Up[]; double Down[]; double TargetUp[]; double TargetDn[]; bool Activate=False; datetime LastDay; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators if(Period()>PERIOD_H1) { Comment("Индикатор работает на таймфреймах меньше H4!"); return(0); } if(StartHour<0 || EndHour<0 || StartHour>23 || EndHour>23 || StartHour>=EndHour) { Comment("Значения StartHour и EndHour должны лежать в диапазоне от 0 до 24 и StartHour < EndHour."); return(0); } SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Up); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,Down); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,TargetUp); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,TargetDn); SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexEmptyValue(2, 0.0); SetIndexEmptyValue(3, 0.0); Activate=True; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- // Удаление объектов-ценовых меток for(int i=ObjectsTotal()-1; i>=0; i--) { string Name=ObjectName(i); if(StringSubstr(Name,0,3)=="Lab") ObjectDelete(Name); } Comment(""); //---- return(0); } //+------------------------------------------------------------------+ //| Ценовая метка со значением уровня | //+------------------------------------------------------------------+ void DrawLabel(datetime TimeL,double Price,bool Upper,color Col,int Code) { if(Upper) string Name="Lab"+DoubleToStr(TimeL,0)+"U"; else Name="Lab"+DoubleToStr(TimeL,0)+"D"; if(ObjectCreate(Name,OBJ_ARROW,0,TimeL,Price)) { ObjectSet(Name,OBJPROP_ARROWCODE,Code); ObjectSet(Name,OBJPROP_COLOR,Col); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- if(!Activate) return(0); LastDay=0; int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; for(int i=limit; i>=0; i--) if(TimeHour(Time[i])>=EndHour) { datetime BeginDay=iTime(Symbol(),PERIOD_D1,iBarShift(Symbol(),PERIOD_D1,Time[i])); // Расчет времени начала суток datetime NextDay=BeginDay+86400; // Расчет времени начала следующих суток if(LastDay>= BeginDay) continue; // Если в этот день уже рисовали уровни, то продолжаем основной цикл int StartBar=iBarShift(Symbol(),0,BeginDay+StartHour*3600); // Бар, соответсвующий началу суток плюс смещение в часах int FinishBar=iBarShift(Symbol(),0,BeginDay+(EndHour-1)*3600); // Бар, соответствующий последнему бару "утреннего флэта" double LowV=Low[iLowest(Symbol(),0,MODE_LOW,StartBar-FinishBar+1,FinishBar)]; // Нижняя граница double HighV=High[iHighest(Symbol(),0,MODE_HIGH,StartBar-FinishBar+1,FinishBar)]; // Верхняя граница double TargetU = (HighV-LowV)*(TargetLevel-100)/100+HighV; double TargetD = LowV-(HighV-LowV)*(TargetLevel-100)/100; // Канал "утреннего флэта" for(int j=StartBar; j>=FinishBar; j--) { Up[j]=HighV; Down[j]=LowV; //Есть такой индикатор // ----------------------- // Ожидаемые цели при пробое флэта for(j=FinishBar; Time[j]<NextDay && j>=0; j--) { TargetUp[j] = TargetU; TargetDn[j] = TargetD; } // ------------------- DrawLabel(Time[iBarShift(Symbol(), 0, BeginDay)], HighV, True, UpColor, 5); // Рисуем верхнюю ценовую метку канала DrawLabel(Time[iBarShift(Symbol(), 0, BeginDay)], LowV, False, DnColor, 5); // Рисуем нижнюю ценовую метку канала DrawLabel(Time[FinishBar],TargetU,True,TargetUpColor,5); // Рисуем верхнюю ценовую метку цели DrawLabel(Time[FinishBar],TargetD,False,TargetDnColor,5); // Рисуем нижнюю ценовую метку цели LastDay=BeginDay; // Отмечаем, что в этот день уровни уже были нарисованы } } WindowRedraw(); //---- return(0); } //+------------------------------------------------------------------+ 1...107108109110111112113114115116117118119120121...260 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下午好!我如何创建一个触发器? 例如,我需要这个条件if(iClose(NULL,HTF,4)<BlueLine)如果它被执行 DayDown = 1 !问:如何将DayDown设为1,并在第二天才轮询?
我有其他对象附在1个对象上,当你删除这个对象时,其他对象就会挂在图表上。
我是这样想的。
如果(DayNext!= Day()) // 如果是新的一天,你必须进行投票。
{
// 投票
如果(iClose(NULL,1440,2)<BlueLine)
如果(iOpen(NULL,1440,1)<BlueLine &&iClose(NULL,HTF,1)>BlueLine)
PROBOI1 = 1;Print("Closed above BlueLine = ",iClose(NULL,HTF,1))。
如果(iClose(NULL,1440,2)>RedLine)
如果(iOpen(NULL,1440,1)>RedLine &&iClose(NULL,HTF,1)<RedLine)
PROBOI1 = -1;Print("Closed below RedLine = ",iClose(NULL,HTF,1))。
DayNext = Day(); //记住这一天
}
如果有什么不对的地方,请改正!此外,如果我想跟踪现在在较低的TF上发生的事情,我是否需要在调查之外写上Day?右边 -STARIJ。
如果(iClose(NULL,60,1)>RedLine&&iClose(NULL,1440,2)>RedLine) ) Sell = 1
https://www.mql5.com/ru/forum/226620#comment_6481536
为条件1设置魔法数字+1,为条件2设置魔法数字+2,以此类推。这样你就可以看到这个仓位是以条件1还是以条件2建立的......
下午。我只成功了一个位置BAY。卖出的魔法套装由于某种原因不能使用。一切都是完全相同的,当然除了魔术师之外。我做错了什么?
我做错了什么?
我很抱歉没有找到通信的开头,但我想立即建议你避免在其中加入复杂的条件和计算--这使得代码无法阅读,从而使搜索逻辑错误变得复杂,我会这样写你的代码。
如果你明白我的意思,你可以再修改一下我给你的代码,我的意思是把它放在一个单独的条件中,如果(OrderType()==OP_BUY....)
那么,发现逻辑错误就会容易得多,我认为
我很抱歉没有找到通信的开头,但我想立即建议避免在其中加入复杂的条件和计算--这使得代码不可读,并因此使搜索逻辑错误变得复杂,我会这样写你的代码。
如果你明白我的意思,你可以再修改一下我给你的代码,我的意思是把它放在一个单独的条件中,如果(OrderType()==OP_BUY....)
那么,发现逻辑错误就会容易得多,我认为
明白了,谢谢,但据我所知,平台对代码的理解没有区别,而对我来说,把一个条件分成几个较短的条件,在搜索错误 时似乎更复杂,因为语句之间的出现次数会增加。但也许你是对的,我很快就会站到你这边来。关于代码逻辑--我没有发现我的和你的有什么不同,仍然没有看到错误。
关于代码逻辑--我发现我的和你的没有区别,我还是没有看到错误。
正是如此--代码的逻辑是一样的,但如果你把条件分割开来,就能更快地找到逻辑错误所在,在你的案例中,如果你把它拿出来。
变成一个单独的条件,我们可以得到代码优化--条件将被检查一次,而不是像你的例子中那样检查4次。
检查专家顾问日志中的输出,使用
Print()
用于记录,以查看哪些代码片段被执行,有哪些参数。
伙计们。
如何读取专家顾问代码中的晨平指标?
我正在尝试这样做,但没有效果。
该指标本身