初学者的问题 MQL5 MT5 MetaTrader 5 - 页 74 1...676869707172737475767778798081...1503 新评论 FinEngineer 2012.12.20 19:12 #731 你好!我试图创建一个 使用2个符号的指标(例如欧元兑美元和英镑兑美元),它没有绘制(给出一个错误4806)......我在每个符号的OnInit函数(例如iRSI)中获得指标句柄,我将指标数据复制到缓冲区并对其进行进一步操作......它接收一个符号的指标数据(与图表上的符号重合的符号,我将指标附在上面)是可以的,但第二个符号的指标数据没有收到......也就是说,它只接收与图表上的符号重合的符号的数据,它被附在上面......我哪里做错了? Yedelkin 2012.12.20 19:20 #732 FinEngineer: 你好!我试图创建一个 使用2个符号的指标(例如欧元兑美元和英镑兑美元),它没有绘制(给出一个错误4806)...我在每个符号的OnInit函数(例如iRSI)中获得指标句柄,我将指标数据复制到缓冲区并对其进行进一步操作...它接收一个符号的指标数据(与图表上的符号一致,我将指标附加在上面)是可以的,但第二个符号的指标数据没有收到......也就是说,它只收到与图表上的符号一致的数据,指标被附加在上面......我做错了什么呢? 因此,请告诉我导致问题的那部分代码。 FinEngineer 2012.12.21 00:10 #733 我把整个代码贴出来,因为没有任何作用,在mql4上一切都很容易,也许我只是不习惯......这些句柄和辅助缓冲区让我的大脑很痛苦。 我认为意思很清楚(2个相关符号的rsi差异),请帮助....,指出错误?#property copyright "Copyright 2012, MetaQuotes Software Corp.#属性链接 "http://www.mql5.com"#财产版本 "1.00"//---- 指示器的渲染属性#property indicator_buffers 3#属性 indicator_separate_window#property indicator_label1 "Pair_delta_RSI"#属性 indicator_type1 DRAW_LINE#property indicator_color1 Red#property indicator_style1 STYLE_SOLID#property indicator_width1 1#属性输入参数输入字符串 Symbol1_Name = "EURUSD"。输入字符串 Symbol2_Name = "GBPUSD"。输入 int PeriodRSI=7;输入 bool Inversia=false。输入ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE。doubleRSI_Buffer[]。双倍RSI1_Buffer[]。双倍RSI2_Buffer[]。int RSI1_Handle;int RSI2_Handle;int OnInit(){SetIndexBuffer(0,DeltaRSI_Buffer,INDICATOR_DATA)。SetIndexBuffer(1,RSI1_Buffer,INDICATOR_CALCULATIONS)。SetIndexBuffer(2,RSI2_Buffer,INDICATOR_CALCULATIONS)。RSI1_Handle=iRSI(Symbol1_Name,0,PeriodRSI,PRICE_CLOSE);//获取指标手柄RSI2_Handle=iRSI(Symbol2_Name,0,PeriodRSI,PRICE_CLOSE)。return(0);}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 &TickVolume[],const long &Volume[],const int &Spread[]){int calculated=BarsCalculated(RSI1_Handle)。if(calculated<rates_total){Print("不是所有RSI1_Handle的数据都被计算出来了(",calculated, "bar)。错误",GetLastError())。return(0);}calculated=BarsCalculated(RSI2_Handle)。if(calculated<rates_total){Print("不是所有RSI2_Handle的数据都被计算出来了(",calculated, "bar)。错误",GetLastError())。return(0);}//------我们可以不复制所有的数据int to_copy;如果(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;否则{to_copy=rates_total-prev_calculated。如果(prev_calculated>0)to_copy++。}//接收RSI1缓冲区如果(CopyBuffer(RSI1_Handle,0,0,to_copy,RSI1_Buffer)<=0){Print("获取RSI1失败!错误",GetLastError())。return(0);}//获得RSI2缓冲区如果(CopyBuffer(RSI2_Handle,0,0,to_copy,RSI2_Buffer)<=0){Print("获取RSI2失败!错误",GetLastError())。return(0);}//---int限制。如果(prev_calculated==0)limit=0。否则limit=prev_calculated-1。//计算delta rsi指标for(int i=limit;i<rates_total; i++)DeltaRSI_Buffer[i]=RSI1_Buffer[i]-RSI2_Buffer[i]。return(rate_total)。} Automated Trading and Strategy Testing www.mql5.com MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions Questions from Beginners MQL5 我将免费编写指标 编码帮助 Denis Lazarev 2012.12.21 00:15 #734 错误#1未能使用SRC键 FinEngineer 2012.12.21 08:10 #735 例如,如果你采取一个标准的自定义MACD指标,并改变以下一行,就会出现这样的错误ExtFastMaHandle=iMA(NULL,0,InpFastEMA,0,MODE_EMA,InpAppliedPrice) 。 至ExtFastMaHandle=iMA("EURUSD",0,InpFastEMA,0,MODE_EMA,InpAppliedPrice)。如果MACD附在EURUSD图表上,一切都会被画出来,如果它附在另一个图表上--会出现错误4806......我怎样才能使它在这个指标中,我可以使用我想要的许多符号?如果你告诉我如何使之前发布的指标发挥作用,我将非常感激。 Артем Иванов 2012.12.21 09:28 #736 mario065: 莱斯特:我在这里放了一个模板,里面有一个修改,显示如何爬行。 https://www.mql5.com/ru/forum/6343/page73 如果你不愿意,你必须正确计算变量。我已经有了沙布隆文件的想法,但成功率不高,把它带到我的条件中去了一下,它是有效的。然而,对我来说有一个重要的僵局--它们被设置在下一根蜡烛上,而不是在一个刻度上。下面是EA的部分内容。 double buy_trail = 0; double sel_trail = 0; double SL,T_P,Open; ulong L_S; if(PositionSelect(_Symbol)) { Open = PositionGetDouble(POSITION_PRICE_OPEN); SL = PositionGetDouble(POSITION_SL); T_P = PositionGetDouble(POSITION_TP); Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); L_S = SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL); buy_trail = NormalizeDouble(Bid - Open,Digits()); sel_trail = NormalizeDouble(Open - Ask,Digits()); if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(!PositionGetDouble(POSITION_SL)) { PositionModify(_Symbol,NormalizeDouble((Open-STR-TR),Digits()),NormalizeDouble((Open+TP),Digits())); } mario 2012.12.21 10:42 #737 Lester: 随着不同程度的成功,我得到了沙布隆文件的要点,根据我的条件进行了一些调整,万岁--止损和利润已经设定。然而,对我来说有一个重要的僵局--它们被设置在下一根蜡烛上,而不是在一个刻度上。这里是代码的一部分。input double TP = 0.003; input double STR = 0.0012; input double TR = 0.0002; //=============================================== //Един вид извикване на модификация на отворената позиция double buy_trail = 0; double sel_trail = 0; double SL,T_P,Open; ulong L_S; Ну ладно-обяснения: if(PositionSelect(_Symbol)){//Ест ли позиция по символа Open = PositionGetDouble(POSITION_PRICE_OPEN);//цена опен для поза SL = PositionGetDouble(POSITION_SL);//цена стоп для поза T_P = PositionGetDouble(POSITION_TP);//цена тейк для поза Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);//цена бид Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);//цена аск L_S = SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);//стоп ниво,если ест такое-оно в пункты buy_trail = NormalizeDouble(Bid - Open,Digits());//вычисляем разстояние от цена бид и цена опен позиции-ето для бай sel_trail = NormalizeDouble(Open - Ask,Digits());//вычисляем разстояние от цена опен позиции и цена аск-ето для сел if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)//если ест бай поза { if(buy_trail > STR)//если разстояние болше указаное { if(NormalizeDouble((Bid - STR),Digits()) >= Open && Open > SL) //если цена бид минус указаное разстояние болше щем цена опен и цена опен болше цена стоп-вызиваем модификация //сама модификация-для стоп будет цена опен,цена тейк не меняем. { ModifyPosition(_Symbol,Open,T_P); } if(NormalizeDouble((Bid - TR),Digits()) > SL && Open <= SL) //если цена бид минус указаное разстояние TR = 0.0002 болше уже от новый стоп(который поменяли уже) и цена опен менше новый стоп //вызиваем модификация //сама модификация - для стоп будет прошлый стоп минус стоп ниво* _Point(что б стали пипси) плюс указаное TR,цена тейк не меняем. //Т.е. будем двигат стоп через каждые 2 пипса { ModifyPosition(_Symbol,NormalizeDouble(((SL - L_S * _Point) + TR),Digits()),T_P); } } } if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { if(sel_trail > STR) { if(NormalizeDouble((Ask + STR),Digits()) <= Open && Open < SL) { ModifyPosition(_Symbol,Open,T_P); } if(NormalizeDouble((Ask + TR),Digits()) < SL && Open >= SL) { ModifyPosition(_Symbol,NormalizeDouble(((SL +L_S * _Point)- TR),Digits()),T_P); } } } } //=============================================== 代码应该总是包含一些行动的条件,但所有的东西都应该被检查并有一些逻辑。 如果你想帮忙,请打印(" ", ); ),看看结果。 Артем Иванов 2012.12.21 11:27 #738 mario065: 这些描述都很清楚,而且都很有效。但这是对 "收支平衡 "和 "尾随 "的修改。我应该写一个修改,在开单后设置StopLimit和TakeProfit,也就是说。1.订货会开幕--------2.修改停止限制(这个还没到!)。 if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(!PositionGetDouble(POSITION_SL)) { PositionModify(_Symbol,NormalizeDouble((Open-STR-TR),Digits()),NormalizeDouble((Open+TP),Digits())); }------3.盈亏平衡的修改4.修改拖曳式止损5.关闭订单你可以使用第2点来修改订单,但只能在下一栏的开始。 mario 2012.12.21 12:52 #739 写了一个函数来打开eats。Сама функция(символ,обем,проскалзивание,стоп,тейк,магик) С вызова функции можно все сразу поставит. bool BuyPositionOpen(const string symbol,double volume,ulong deviation,double StopLoss,double Takeprofit,int Magic) if(Какое то условие) { BuyPositionOpen(_Symbol,Lot,0,NormalizeDouble(Ask - 0.003,_Digits),NormalizeDouble(Ask + 0.003,_Digits),MagicNumber); } if(Какое то условие) { SellPositionOpen(_Symbol,Lot,0,NormalizeDouble(Bid + 0.003,_Digits),NormalizeDouble(Bid - 0.003,_Digits),MagicNumber); } Функция для закрития: Сама функция(символ,проскалзивание,магик) bool BuyPositionClose(const string symbol,ulong deviation,int Magic) // Логика за затваряне на дългите if(Какое то условие){ BuyPositionClose(_Symbol,0,MagicNumber);} // Логика за затваряне на късите if(Какое то условие){ SellPositionClose(_Symbol,0,MagicNumber);} Если не хочете сразу ставит стоп и тейк,тогда: //=============================================== //Един вид извикване на модификация на отворената позиция double buy_trail = 0; double sel_trail = 0; double SL,T_P,Open; ulong L_S; if(PositionSelect(_Symbol)){ Open = PositionGetDouble(POSITION_PRICE_OPEN); SL = PositionGetDouble(POSITION_SL); T_P = PositionGetDouble(POSITION_TP); Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); L_S = SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL); buy_trail = NormalizeDouble(Bid - Open,Digits()); sel_trail = NormalizeDouble(Open - Ask,Digits()); if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(SL = 0 && T_P = 0)//если стоп и тейк равни нулю-вызиваете модофикация и там акуратно ложите нужная вам цена { ModifyPosition(_Symbol,NormalizeDouble((Open - 0.003),Digits()),NormalizeDouble((Open + 0.003),Digits())); } //Далше вам понятно: if(buy_trail > STR) { if(NormalizeDouble((Bid - STR),Digits()) >= Open && Open > SL) { ModifyPosition(_Symbol,Open,T_P); } if(NormalizeDouble((Bid - TR),Digits()) > SL && Open <= SL) { ModifyPosition(_Symbol,NormalizeDouble(((SL - L_S * _Point) + TR),Digits()),T_P); } } } if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { if(sel_trail > STR) { if(NormalizeDouble((Ask + STR),Digits()) <= Open && Open < SL) { ModifyPosition(_Symbol,Open,T_P); } if(NormalizeDouble((Ask + TR),Digits()) < SL && Open >= SL) { ModifyPosition(_Symbol,NormalizeDouble(((SL +L_S * _Point)- TR),Digits()),T_P); } } } } //=============================================== FinEngineer 2012.12.21 12:58 #740 这条线上有任何MQL5的开发者吗!?我是不是在错误的分支中提出了一个问题?那么请告诉我如何向开发者提出问题?上面的问题对一个有经验的程序员来说是很基本的... 1...676869707172737475767778798081...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好!我试图创建一个 使用2个符号的指标(例如欧元兑美元和英镑兑美元),它没有绘制(给出一个错误4806)...我在每个符号的OnInit函数(例如iRSI)中获得指标句柄,我将指标数据复制到缓冲区并对其进行进一步操作...它接收一个符号的指标数据(与图表上的符号一致,我将指标附加在上面)是可以的,但第二个符号的指标数据没有收到......也就是说,它只收到与图表上的符号一致的数据,指标被附加在上面......我做错了什么呢?
我把整个代码贴出来,因为没有任何作用,在mql4上一切都很容易,也许我只是不习惯......这些句柄和辅助缓冲区让我的大脑很痛苦。
我认为意思很清楚(2个相关符号的rsi差异),请帮助....,指出错误?
#property copyright "Copyright 2012, MetaQuotes Software Corp.错误#1
未能使用SRC键
例如,如果你采取一个标准的自定义MACD指标,并改变以下一行,就会出现这样的错误
ExtFastMaHandle=iMA(NULL,0,InpFastEMA,0,MODE_EMA,InpAppliedPrice) 。
至
ExtFastMaHandle=iMA("EURUSD",0,InpFastEMA,0,MODE_EMA,InpAppliedPrice)。
如果MACD附在EURUSD图表上,一切都会被画出来,如果它附在另一个图表上--会出现错误4806......我怎样才能使它在这个指标中,我可以使用我想要的许多符号?
如果你告诉我如何使之前发布的指标发挥作用,我将非常感激。
莱斯特:我在这里放了一个模板,里面有一个修改,显示如何爬行。
https://www.mql5.com/ru/forum/6343/page73
如果你不愿意,你必须正确计算变量。
我已经有了沙布隆文件的想法,但成功率不高,把它带到我的条件中去了一下,它是有效的。然而,对我来说有一个重要的僵局--它们被设置在下一根蜡烛上,而不是在一个刻度上。下面是EA的部分内容。
随着不同程度的成功,我得到了沙布隆文件的要点,根据我的条件进行了一些调整,万岁--止损和利润已经设定。然而,对我来说有一个重要的僵局--它们被设置在下一根蜡烛上,而不是在一个刻度上。这里是代码的一部分。
代码应该总是包含一些行动的条件,但所有的东西都应该被检查并有一些逻辑。
如果你想帮忙,请打印(" ", ); ),看看结果。
这些描述都很清楚,而且都很有效。但这是对 "收支平衡 "和 "尾随 "的修改。我应该写一个修改,在开单后设置StopLimit和TakeProfit,也就是说。
1.订货会开幕
--------
2.修改停止限制(这个还没到!)。
------
3.盈亏平衡的修改
4.修改拖曳式止损
5.关闭订单
你可以使用第2点来修改订单,但只能在下一栏的开始。
写了一个函数来打开eats。