来自一个 "傻瓜 "的问题 - 页 186 1...179180181182183184185186187188189190191192193...277 新评论 [删除] 2012.09.17 08:16 #1851 Yedelkin: 不完全是,对于for语句,你需要指定变量i的类型。要选择一个位置--首先使用PositionGetSymbol(i),然后--查看所选位置的属性。谢谢你, 对吗?int TotalBullPositions() { int Counter=0; for(int i = 0; i < PositionsTotal(); i++) { if(PositionSelect(Symbol())) { if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) Counter++;}} return(Counter); } Yedelkin 2012.09.17 08:32 #1852 G001: 谢谢你, 对吗? 是的,这几乎就是模式。这一行就在这里。PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY 编译器很可能会产生一个警告。它可以通过明确地将PositionGetInteger(POSITION_TYPE)转换为所需的枚举类型来解决。 这条线 for(int i = 0; i < PositionsTotal(); i++) 有些程序员喜欢按降序运行,而不是按升序运行。 补遗。为什么你把正确的一行改为if(PositionSelect(Symbol()))? [删除] 2012.09.17 08:46 #1853 Yedelkin: 是的,大致上是这样的模式。这一行就在这里。 编译器很可能会产生一个警告信息。它可以通过明确地将PositionGetInteger(POSITION_TYPE)转换为所需的枚举类型来处理。 这条线 有些人喜欢按照降序而不是升序运行。 补遗。为什么你把正确的一行改为if(PositionSelect(Symbol()))?非常感谢你。if(PositionSelect(Symbol()))改为:PositionGetSymbol(i)==Symbol()或者我把它改成这个。PositionSelect(PositionGetSymbol(i))我将检查哪个选项有效。谢谢你。 Yedelkin 2012.09.17 08:48 #1854 G001: 换成了。 否则我就换成这个。我看看哪一个有用。 只需阅读PositionGetSymbol() 函数的描述。:) [删除] 2012.09.17 10:17 #1855 非常感谢你。一切都已经开始工作了。现在我必须从指标中获取信号。//+------------------------------------------------------------------+ //| MACDATR.mq5 | //| Copyright © 2011, Svinozavr | //+------------------------------------------------------------------+ //---- Indicator settings #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 4 #property indicator_level1 +0.0005 #property indicator_level2 -0.0005 #property indicator_levelcolor DimGray #define RESET 0 //----- #property indicator_type1 DRAW_HISTOGRAM #property indicator_color1 Gray #property indicator_style1 STYLE_SOLID #property indicator_width1 1 #property indicator_label1 "MACD" //----- #property indicator_type2 DRAW_HISTOGRAM #property indicator_color2 Green #property indicator_style2 STYLE_SOLID #property indicator_width2 1 #property indicator_label2 "Bull" //----- #property indicator_type3 DRAW_HISTOGRAM #property indicator_color3 Red #property indicator_style3 STYLE_SOLID #property indicator_width3 1 #property indicator_label3 "Bear" //----- #property indicator_type4 DRAW_LINE #property indicator_color4 Olive #property indicator_style4 STYLE_SOLID #property indicator_width4 1 #property indicator_label4 "ATR" //----- //----- Indicator parameters //+------------------------------------------------------------------+ input uint FastEMA = 12; input uint SlowEMA = 26; input uint SignalEMA = 9; input int ATRG = 0; input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; //+------------------------------------------------------------------+ //----- double ATRmin=0; double kATR=1; int min_rates_total; int ATRHandle,MACDHandle; double MACDBuffer[],ATRBuffer[],Bull[],Bear[]; //+------------------------------------------------------------------+ //| MACD indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //----- if(ATRG) min_rates_total=int(MathMax(FastEMA,SlowEMA)+ATRG); else min_rates_total=2*int(MathMax(FastEMA,SlowEMA)); //----- int ATR; if(!ATRG) ATR=int(SlowEMA); else ATR=ATRG; ATRmin*=_Point; //----- ATRHandle=iATR(NULL,0,ATR); if(ATRHandle==INVALID_HANDLE)Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR"); //----- MACDHandle=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,AppliedPrice); if(MACDHandle==INVALID_HANDLE)Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà MACD"); //----- SetIndexBuffer(0,MACDBuffer,INDICATOR_DATA); PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); ArraySetAsSeries(MACDBuffer,true); //----- SetIndexBuffer(1,Bull,INDICATOR_DATA); PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total); ArraySetAsSeries(Bull,true); //----- SetIndexBuffer(2,Bear,INDICATOR_DATA); PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total); ArraySetAsSeries(Bear,true); //----- SetIndexBuffer(3,ATRBuffer,INDICATOR_DATA); PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total); ArraySetAsSeries(ATRBuffer,true); //----- string shortname; StringConcatenate(shortname,"MACDATR (",FastEMA,", ",SlowEMA,", ",SignalEMA,", ",EnumToString(AppliedPrice),")"); //----- IndicatorSetString(INDICATOR_SHORTNAME,shortname); //----- IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //----- } //+------------------------------------------------------------------+ //| MACD 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[] ) { //----- Check for data if(rates_total<min_rates_total) return(0); //----- int to_copy,limit,i; double atr,Atr[]; datetime Time[1]; //----- if(prev_calculated>rates_total || prev_calculated<=0) { limit=rates_total-min_rates_total; } else limit=rates_total-prev_calculated; //----- ArraySetAsSeries(Atr,true); //----- to_copy=limit+1; //----- if(CopyBuffer(ATRHandle,0,0,to_copy,Atr)<=0) return(RESET); if(CopyBuffer(MACDHandle,MAIN_LINE,0,to_copy,MACDBuffer)<=0) return(RESET); //----- for(i=limit; i>=0 && !IsStopped(); i--) { atr=kATR*Atr[i]; // ATR atr=MathMax(atr,ATRmin); //----- if(MACDBuffer[i]>0) {ATRBuffer[i]=MACDBuffer[i]-atr;} if(MACDBuffer[i]<0) {ATRBuffer[i]=MACDBuffer[i]+atr;} } //----- for(i=limit; i>=0 && !IsStopped(); i--) { //----- Bear[i]=0; Bull[i]=0; //----- if(MACDBuffer[i]>0 && MACDBuffer[i+1]<MACDBuffer[i] && ATRBuffer[i]>=0) {Bull[i]=MACDBuffer[i];} if(MACDBuffer[i]<0 && MACDBuffer[i+1]>MACDBuffer[i] && ATRBuffer[i]<=0) {Bear[i]=MACDBuffer[i];} } //+------------------------------------------------------------------+ //----- Done return(rates_total); } //+------------------------------------------------------------------+这样做了,却没有效果。double Bull[3]; double Bear[3];Indicator=iCustom(NULL,IndiTF,"MACDATR",FastEMA,SlowEMA,SignalEMA,ATRG,AppliedPrice); return(0);}.................. CopyBuffer(Indicator,1,0,3,Bull); ArraySetAsSeries(Bull,true); CopyBuffer(Indicator,2,0,3,Bear); ArraySetAsSeries(Bear,true);.....................if(Bull[1] > 0.0 && Bull[2] <= 0.0) ........................ if(Baer[1] < 0.0 && Bear[2] >= 0.0) ........................ Yedelkin 2012.09.17 10:39 #1856 G001: 现在你必须从指标中获取信号:我这样做了,但没有效果。 你是在检查手轮的无效性吗?Indicator=iCustom(NULL,IndiTF,"MACDATR",FastEMA,SlowEMA,SignalEMA,ATRG,AppliedPrice); [删除] 2012.09.17 10:45 #1857 Yedelkin: 你是否检查过手牌的无效性?不,请告诉我这是什么,怎么做。谢谢你的时间。 Yedelkin 2012.09.17 11:01 #1858 G001: 不,请告诉我这是什么,怎么做。 谢谢你的时间。 是的,你已经有一个类似的检查,在其他地方。MACDHandle=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,AppliedPrice); if(MACDHandle==INVALID_HANDLE)Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà MACD"); 如果是INVALID_HANDLE,打印一个错误ResetLastError(); Indicator=iCustom(....); if(Indicator==INVALID_HANDLE) Print("_LastError=",_LastError); [删除] 2012.09.17 11:06 #1859 Yedelkin: 是的,你已经有一个类似的检查,在其他地方。 如果有一个INVALID_HANDLE,打印一个错误非常感谢你。我现在明白了,我没有写这个指标,我不知道在EA中也应该这样做。再次感谢你们。 [删除] 2012.09.17 17:52 #1860 我已经完全累了。不能正常打开。不能正确读取指标信号。请帮助。错误在哪里?//+------------------------------------------------------------------+ //| Expert.mq5 | //+------------------------------------------------------------------+ // Input Parameters //+------------------------------------------------------------------+ input int TakeProfit = 550; input int StopLoss = 550; input int OrderDrive = 20; input double LotSize = 0.01; //+------------------------------------------------------------------+ input ENUM_TIMEFRAMES IndiTF=PERIOD_CURRENT; input int FastEMA = 12; input int SlowEMA = 26; input int SignalEMA = 9; input int ATRG = 0; input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; //+------------------------------------------------------------------+ MqlTradeRequest request; MqlTradeResult result; MqlTradeCheckResult check; int Indicator; double Bull[]; double Bear[]; double Ask,Bid; int i,pos,Spread; ulong StopLevel; //+------------------------------------------------------------------+ int OnInit() { ResetLastError(); Indicator=iCustom(Symbol(),IndiTF,"MACDATR",FastEMA,SlowEMA,SignalEMA,ATRG,AppliedPrice); if(Indicator==INVALID_HANDLE) Print("HandleError = ",_LastError); return(0); } //+------------------------------------------------------------------+ void OnDeinit(const int reason){} //+------------------------------------------------------------------+ void OnTick() { //----- CopyBuffer(Indicator,1,0,3,Bull); ArraySetAsSeries(Bull,true); //----- CopyBuffer(Indicator,2,0,3,Bear); ArraySetAsSeries(Bear,true); //----- Ask = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits); Bid = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits); Spread=int(SymbolInfoInteger(Symbol(),SYMBOL_SPREAD)); StopLevel=SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL); //+------------------------------------------------------------------+ if(OrdersTotal() < 1 && PositionsTotal() < 1) { //----- Open BUY_STOP if(Bear[1] >= 0.0 && Bear[2] < 0.0) { request.action = TRADE_ACTION_PENDING; request.symbol = _Symbol; request.volume = LotSize; request.price=NormalizeDouble(Ask+StopLevel*_Point,_Digits); request.sl = NormalizeDouble(request.price - StopLoss*_Point,_Digits); request.tp = NormalizeDouble(request.price + TakeProfit*_Point,_Digits); request.type=ORDER_TYPE_BUY_STOP; request.type_filling=ORDER_FILLING_FOK; if(OrderCheck(request,check)) { OrderSend(request,result); } } //----- Open SELL_STOP if(Bull[1] <= 0.0 && Bull[2] > 0.0) { request.action = TRADE_ACTION_PENDING; request.symbol = _Symbol; request.volume = LotSize; request.price=NormalizeDouble(Bid-StopLevel*_Point,_Digits); request.sl = NormalizeDouble(request.price + StopLoss*_Point,_Digits); request.tp = NormalizeDouble(request.price - TakeProfit*_Point,_Digits); request.type=ORDER_TYPE_SELL_STOP; request.type_filling=ORDER_FILLING_FOK; if(OrderCheck(request,check)) { OrderSend(request,result); } } } } //+------------------------------------------------------------------+ 1...179180181182183184185186187188189190191192193...277 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不完全是,对于for语句,你需要指定变量i的类型。要选择一个位置--首先使用PositionGetSymbol(i),然后--查看所选位置的属性。
谢谢你, 对吗?
谢谢你, 对吗?
是的,这几乎就是模式。这一行就在这里。
编译器很可能会产生一个警告。它可以通过明确地将PositionGetInteger(POSITION_TYPE)转换为所需的枚举类型来解决。
这条线
有些程序员喜欢按降序运行,而不是按升序运行。
补遗。为什么你把正确的一行改为if(PositionSelect(Symbol()))?
是的,大致上是这样的模式。这一行就在这里。
编译器很可能会产生一个警告信息。它可以通过明确地将PositionGetInteger(POSITION_TYPE)转换为所需的枚举类型来处理。
这条线
有些人喜欢按照降序而不是升序运行。
补遗。为什么你把正确的一行改为if(PositionSelect(Symbol()))?
非常感谢你。
改为:
或者我把它改成这个。
我将检查哪个选项有效。
谢谢你。
否则我就换成这个。
我看看哪一个有用。
现在我必须从指标中获取信号。
这样做了,却没有效果。
你是在检查手轮的无效性吗?
你是否检查过手牌的无效性?
是的,你已经有一个类似的检查,在其他地方。
如果是INVALID_HANDLE,打印一个错误
是的,你已经有一个类似的检查,在其他地方。
如果有一个INVALID_HANDLE,打印一个错误
我已经完全累了。不能正常打开。
不能正确读取指标信号。
请帮助。错误在哪里?