如何编码? - 页 100 1...93949596979899100101102103104105106107...347 新评论 panteraschoice 2008.06.09 14:51 #991 只有买入,没有卖出 创建一个有利可图的EA,但它可以是两倍的好(也许),因为现在只有买入,没有卖出订单。 有谁知道原因吗? //+------------------------------------------------------------------+ //| 信号开始 | //+------------------------------------------------------------------+ double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0) 。 double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0); double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1); 如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY; 如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL; //+------------------------------------------------------------------+ //| 信号结束 | //+------------------------------------------------------------------+ How to code? ATR追踪止损 - 帮助 问吧! IN10TION 2008.06.09 16:05 #992 发布总的代码,有另一个问题... 第二步可能是你的iCustom()函数。 panteraschoice: 创建了一个有利可图的EA,但它可以是两倍的好(也许),现在只有买入,没有卖出订单。有谁知道原因吗? //+------------------------------------------------------------------+ //| 信号开始 | //+------------------------------------------------------------------+ double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0) 。 double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0); double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1); 如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY; 如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL; //+------------------------------------------------------------------+ //|信号结束| //+------------------------------------------------------------------+ valoncross 2008.06.10 01:01 #993 放置和查看未来日期的对象? 你好,有谁知道MQL4是否支持将指标对象放置到未来并查看未来对象? 我试过ObjectMove到未来日期(没有错误返回),但显示停止在最后的刻度日期。 谢谢 MrMarketz 2008.06.10 02:38 #994 如果你的意思是这样的话,MA有一个移位功能...。+2将使它向前滑动2个TF条。-2将向后滑动2。 panteraschoice 2008.06.10 04:52 #995 IN10TION: 发布总的代码,还有一个问题......第二步可能是你的iCustom()函数。 #property link "https://www.forex-tsd.com" 外部int MagicNumber = 1001; 外部 bool EachTickMode = False; 外置双数 Lots = 0.01; extern int Slippage = 4; 外部 bool StopLossMode = True; External int StopLoss = 70; 外部 bool TakeProfitMode = True; 外来的int TakeProfit = 300; 外部 bool TrailingStopMode = True; extern int TrailingStop = 25; 外置双倍最大风险 =0;//0.15 外置双倍递减系数 =3; 外置 int MaxOrders = 3000; 外部 bool UseHourTrade = False; 外置 int FromHourTrade = 8; Extern int ToHourTrade = 18; #define SIGNAL_NONE 0 #define SIGNAL_BUY 1 #define SIGNAL_SELL 2 #define SIGNAL_CLOSEBUY 3 #define SIGNAL_CLOSESELL 4 int BarCount; int Current; bool TickCheck = False; //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int init() { BarCount = Bars; 如果(EachTickMode)Current = 0;否则Current = 1。 return(0); } //+------------------------------------------------------------------+ //| 专家去初始化功能| //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| 专家启动功能| //+------------------------------------------------------------------+ int start() { 如果(UseHourTrade){ 如果(!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) { Comment("交易时间还没有到来!")。 return(0); } } int Order = SIGNAL_NONE; int Total, Ticket; double StopLossLevel, TakeProfitLevel; int digit = MarketInfo(Symbol(),MODE_DIGITS); 如果(EachTickMode && Bars != BarCount) EachTickMode = False; Total = OrdersTotal(); 订单 = SIGNAL_NONE; //+------------------------------------------------------------------+ //| 信号开始 | //+------------------------------------------------------------------+ double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0); double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0); double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1); 如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY; 如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL; //+------------------------------------------------------------------+ //| 信号结束 | //+------------------------------------------------------------------+ //买入 if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){ 如果(ScanTrades() < MaxOrders) { //检查自由保证金 如果(AccountFreeMargin() < (1000 * Lots)) { Print("我们没有钱。Free Margin = ", AccountFreeMargin())。 return(0); } StopLossLevel = Ask - StopLoss * Point; TakeProfitLevel = Ask + TakeProfit * Point; Ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(), NormalizeDouble(Ask,digit), 滑点。 NormalizeDouble(StopLossLevel,digit)。 NormalizeDouble(TakeProfitLevel,digit)。 "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue)。 如果(Ticket > 0) { 如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))Print("BUY订单打开 : ", OrderOpenPrice()); else Print("错误打开BUY订单:", GetLastError())。 } 如果(EachTickMode) TickCheck = True; 如果(!EachTickMode) BarCount = Bars; return(0); } } //卖出 如果(Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){ 如果(ScanTrades() < MaxOrders) { //检查自由保证金 如果(AccountFreeMargin() < (1000 * Lots)) { Print("我们没有钱。Free Margin = ", AccountFreeMargin())。 return(0); } StopLossLevel = Bid + StopLoss * Point; TakeProfitLevel = Bid - TakeProfit * Point; Ticket = OrderSend(Symbol(), OP_SELL, LotsOptimized(), NormalizeDouble(Bid,digit)。 滑点。 NormalizeDouble(StopLossLevel,digit)。 NormalizeDouble(TakeProfitLevel,digit)。 "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink)。 如果(Ticket > 0) { 如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))Print("卖出订单 打开 : ", OrderOpenPrice()); else Print("错误打开卖出订单:", GetLastError())。 } 如果(EachTickMode) TickCheck = True; 如果(!EachTickMode) BarCount = Bars; return(0); } } //检查位置 for (int i = 0; i < Total; i ++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。 如果(OrderType() <= OP_SELL && OrderSymbol() == Symbol() ) { 如果(OrderType() == OP_BUY && OrderMagicNumber() ==MagicNumber ) { //平仓 if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){ OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。 如果(EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } //拖曳止损 如果(TrailingStopMode && TrailingStop > 0) { 如果(Bid - OrderOpenPrice() > Point * TrailingStop) { 如果(OrderStopLoss() < Bid - Point * TrailingStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。 if (!EachTickMode) BarCount = Bars; return(0); } } } } else { 如果(OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber) { //平仓 如果(Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange)。 如果(EachTickMode) TickCheck = True; 如果(!EachTickMode) BarCount = Bars; return(0); } //拖曳止损 如果(TrailingStopMode && TrailingStop > 0) { 如果((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { 如果((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) 。 if (!EachTickMode) BarCount = Bars; return(0); } } } }} } } if (!EachTickMode) BarCount = Bars; return(0); } int ScanTrades() { int total = OrdersTotal(); int numords = 0; for(int cnt=0; cnt<total; cnt++) { OrderSelect(cnt, SELECT_BY_POS)。 if(OrderSymbol() == Symbol() && OrderType() <=OP_SELLSTOP && OrderMagicNumber() == MagicNumber) numords++; } return(numords); } //bool ExistPositions() { // for (int i=0; i<OrdersTotal(); i++) { // 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // 如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { // 返回(True)。 // } // } // } // return(false); //} double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // 历史订单总数 int losses=0; // 亏损订单的数量,没有休息时间 //---- 选择手数大小 if(MaximumRisk>0)lot=NormalizeDouble(Lots*AccountFreeMargin()*MaximumRisk/1000.0,1); //----,计算无休止的损失订单的数量 如果(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("历史错误!"); break; } 如果(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 继续。 //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } 如果(损失>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //---- 返回手数大小 如果(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ 问吧! How to code? ICustom函数 IN10TION 2008.06.10 05:50 #996 你是否得到任何错误代码 或其他东西(在回测中),给你提示出了什么问题? panteraschoice:#属性链接 "https://www.forex-tsd.com"外部int MagicNumber = 1001; 外部 bool EachTickMode = False; extern double Lots = 0.01; extern int Slippage = 4; extern bool StopLossMode = True; External int StopLoss = 70; 外部 bool TakeProfitMode = True; 外来的int TakeProfit = 300; 外部 bool TrailingStopMode = True; extern int TrailingStop = 25; 外置双倍最大风险 =0;//0.15 外置双倍递减系数 =3; 外置 int MaxOrders = 3000; 外部 bool UseHourTrade = False; 外置 int FromHourTrade = 8; Extern int ToHourTrade = 18; #define SIGNAL_NONE 0 #define SIGNAL_BUY 1 #define SIGNAL_SELL 2 #define SIGNAL_CLOSEBUY 3 #define SIGNAL_CLOSESELL 4 int BarCount; int Current; bool TickCheck = False; //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int init() { BarCount = Bars; 如果(EachTickMode)Current = 0;否则Current = 1。 return(0); } //+------------------------------------------------------------------+ //| 专家去初始化功能| //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| 专家启动功能| //+------------------------------------------------------------------+ int start() { 如果(UseHourTrade){ 如果(!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) { Comment("交易时间还没有到来!")。 return(0); } } int Order = SIGNAL_NONE; int Total, Ticket; double StopLossLevel, TakeProfitLevel; int digit = MarketInfo(Symbol(),MODE_DIGITS); 如果(EachTickMode && Bars != BarCount) EachTickMode = False; Total = OrdersTotal(); 订单 = SIGNAL_NONE; //+------------------------------------------------------------------+ //| 信号开始 | //+------------------------------------------------------------------+ double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0); double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0); double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1); 如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY; 如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL; //+------------------------------------------------------------------+ //| 信号结束 | //+------------------------------------------------------------------+ //买入 if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){ 如果(ScanTrades() < MaxOrders) { //检查自由保证金 如果(AccountFreeMargin() < (1000 * Lots)) { Print("我们没有钱。Free Margin = ", AccountFreeMargin())。 return(0); } StopLossLevel = Ask - StopLoss * Point; TakeProfitLevel = Ask + TakeProfit * Point; Ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(), NormalizeDouble(Ask,digit), 滑点。 NormalizeDouble(StopLossLevel,digit)。 NormalizeDouble(TakeProfitLevel,digit)。 "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue)。 如果(Ticket > 0) { 如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))Print("BUY订单打开 : ", OrderOpenPrice()); else Print("错误打开BUY订单:", GetLastError())。 } 如果(EachTickMode) TickCheck = True; 如果(!EachTickMode) BarCount = Bars; return(0); } } //卖出 如果(Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){ 如果(ScanTrades() < MaxOrders) { //检查自由保证金 如果(AccountFreeMargin() < (1000 * Lots)) { Print("我们没有钱。Free Margin = ", AccountFreeMargin())。 return(0); } StopLossLevel = Bid + StopLoss * Point; TakeProfitLevel = Bid - TakeProfit * Point; Ticket = OrderSend(Symbol(), OP_SELL, LotsOptimized(), NormalizeDouble(Bid,digit)。 滑点。 NormalizeDouble(StopLossLevel,digit)。 NormalizeDouble(TakeProfitLevel,digit)。 "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink)。 如果(Ticket > 0) { 如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))Print("卖出订单打开 : ", OrderOpenPrice()); else Print("错误打开卖出订单:", GetLastError())。 } 如果(EachTickMode) TickCheck = True; 如果(!EachTickMode) BarCount = Bars; return(0); } } //检查位置 for (int i = 0; i < Total; i ++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。 如果(OrderType() <= OP_SELL && OrderSymbol() == Symbol() ) { 如果(OrderType() == OP_BUY && OrderMagicNumber() ==MagicNumber ) { //平仓 if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){ OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。 如果(EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } //拖曳止损 如果(TrailingStopMode && TrailingStop > 0) { 如果(Bid - OrderOpenPrice() > Point * TrailingStop) { 如果(OrderStopLoss() < Bid - Point * TrailingStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。 if (!EachTickMode) BarCount = Bars; return(0); } } } } else { 如果(OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber) { //平仓 如果(Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange)。 如果(EachTickMode) TickCheck = True; 如果(!EachTickMode) BarCount = Bars; return(0); } //拖曳止损 如果(TrailingStopMode && TrailingStop > 0) { 如果((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { 如果((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) 。 if (!EachTickMode) BarCount = Bars; return(0); } } } }} } } if (!EachTickMode) BarCount = Bars; return(0); } int ScanTrades() { int total = OrdersTotal(); int numords = 0; for(int cnt=0; cnt<total; cnt++) { OrderSelect(cnt, SELECT_BY_POS)。 if(OrderSymbol() == Symbol() && OrderType() <=OP_SELLSTOP && OrderMagicNumber() == MagicNumber) numords++; } return(numords); } //bool ExistPositions() { // for (int i=0; i<OrdersTotal(); i++) { // 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // 如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { // 返回(True)。 // } // } // } // return(false); //} double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // 历史订单总数 int losses=0; // 亏损订单的数量,没有休息时间 //---- 选择手数大小 if(MaximumRisk>0)lot=NormalizeDouble(Lots*AccountFreeMargin()*MaximumRisk/1000.0,1); //----,计算无休止的损失订单的数量 如果(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("历史错误!"); break; } 如果(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 继续。 //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } 如果(损失>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //---- 返回手数大小 如果(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ IN10TION 2008.06.10 06:12 #997 我现在只用RSIFilter做回测,我确实使用了RSIMixFilter,在这个主题的几个帖子中,我发布了那个指标,我确实得到了BUYS和SELLS,所以做订单的逻辑BUY和SELL是确定的,问题是你的iCustom信号... RSIMixFilter,不在这个主题里,对不起,它在ASK 这里。 panteraschoice: 创建了一个有利可图的EA,但它可以是两倍的好(也许),现在只有买入,没有卖出订单。有谁知道为什么? //+------------------------------------------------------------------+ //| 信号开始 | //+------------------------------------------------------------------+ double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0); double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0); double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1); 如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY; 如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL; //+------------------------------------------------------------------+ //|信号结束| //+------------------------------------------------------------------+ IN10TION 2008.06.10 06:25 #998 我做了一些回测,欧元兑美元H1从2007年4月到现在,只用了这个RSIMixFilter... 90%的建模质量,不知道为什么不显示。 panteraschoice: 创建了一个有利可图的EA,但它可以是两倍的好(也许),现在只有买入,没有卖出订单。有谁知道原因吗? //+------------------------------------------------------------------+ //| 信号开始 | //+------------------------------------------------------------------+ double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0) 。 double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0); double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1); 如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY; 如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL; //+------------------------------------------------------------------+ //|信号结束| //+------------------------------------------------------------------+ 附加的文件: testergraph_1.gif 8 kb panteraschoice 2008.06.10 07:09 #999 这个回溯测试,是买入和卖出还是只有其中之一?在我身上,我只得到了买入(或者在我改变代码时只得到了卖出)。 我真的没有看到任何显示错误的东西。 panteraschoice 2008.06.10 07:15 #1000 IN10TION: 我现在只用RSIFilter做回测,我确实使用了RSIMixFilter,在这个主题的几个帖子中,我发布了那个指标,我确实得到了BUYS和SELLS,所以做订单BUY和SELL的逻辑是好的,问题是你的iCustom信号... 那么这样做可以吗? double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1); if ( Sg>0 ) Order = SIGNAL_BUY; 如果(Sg<0 ) Order = SIGNAL_SELL; 1...93949596979899100101102103104105106107...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
只有买入,没有卖出
创建一个有利可图的EA,但它可以是两倍的好(也许),因为现在只有买入,没有卖出订单。
有谁知道原因吗?
//+------------------------------------------------------------------+
//| 信号开始 |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0) 。
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY;
如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| 信号结束 |
//+------------------------------------------------------------------+
发布总的代码,有另一个问题...
第二步可能是你的iCustom()函数。
创建了一个有利可图的EA,但它可以是两倍的好(也许),现在只有买入,没有卖出订单。
有谁知道原因吗?
//+------------------------------------------------------------------+
//| 信号开始 |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0) 。
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY;
如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//|信号结束|
//+------------------------------------------------------------------+放置和查看未来日期的对象?
你好,有谁知道MQL4是否支持将指标对象放置到未来并查看未来对象? 我试过ObjectMove到未来日期(没有错误返回),但显示停止在最后的刻度日期。 谢谢
如果你的意思是这样的话,MA有一个移位功能...。+2将使它向前滑动2个TF条。-2将向后滑动2。
发布总的代码,还有一个问题......第二步可能是你的iCustom()函数。
#property link "https://www.forex-tsd.com"
外部int MagicNumber = 1001;
外部 bool EachTickMode = False;
外置双数 Lots = 0.01;
extern int Slippage = 4;
外部 bool StopLossMode = True;
External int StopLoss = 70;
外部 bool TakeProfitMode = True;
外来的int TakeProfit = 300;
外部 bool TrailingStopMode = True;
extern int TrailingStop = 25;
外置双倍最大风险 =0;//0.15
外置双倍递减系数 =3;
外置 int MaxOrders = 3000;
外部 bool UseHourTrade = False;
外置 int FromHourTrade = 8;
Extern int ToHourTrade = 18;
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| 专家初始化函数 |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
如果(EachTickMode)Current = 0;否则Current = 1。
return(0);
}
//+------------------------------------------------------------------+
//| 专家去初始化功能|
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| 专家启动功能|
//+------------------------------------------------------------------+
int start() {
如果(UseHourTrade){
如果(!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("交易时间还没有到来!")。
return(0);
}
}
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
int digit = MarketInfo(Symbol(),MODE_DIGITS);
如果(EachTickMode && Bars != BarCount) EachTickMode = False;
Total = OrdersTotal();
订单 = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| 信号开始 |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY;
如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| 信号结束 |
//+------------------------------------------------------------------+
//买入
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){
如果(ScanTrades() < MaxOrders) {
//检查自由保证金
如果(AccountFreeMargin() < (1000 * Lots)) {
Print("我们没有钱。Free Margin = ", AccountFreeMargin())。
return(0);
}
StopLossLevel = Ask - StopLoss * Point;
TakeProfitLevel = Ask + TakeProfit * Point;
Ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(),
NormalizeDouble(Ask,digit),
滑点。
NormalizeDouble(StopLossLevel,digit)。
NormalizeDouble(TakeProfitLevel,digit)。
"Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue)。
如果(Ticket > 0) {
如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))Print("BUY订单打开 : ", OrderOpenPrice()); else Print("错误打开BUY订单:", GetLastError())。
}
如果(EachTickMode) TickCheck = True;
如果(!EachTickMode) BarCount = Bars;
return(0);
}
}
//卖出
如果(Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){
如果(ScanTrades() < MaxOrders) {
//检查自由保证金
如果(AccountFreeMargin() < (1000 * Lots)) {
Print("我们没有钱。Free Margin = ", AccountFreeMargin())。
return(0);
}
StopLossLevel = Bid + StopLoss * Point;
TakeProfitLevel = Bid - TakeProfit * Point;
Ticket = OrderSend(Symbol(), OP_SELL, LotsOptimized(),
NormalizeDouble(Bid,digit)。
滑点。
NormalizeDouble(StopLossLevel,digit)。
NormalizeDouble(TakeProfitLevel,digit)。
"Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink)。
如果(Ticket > 0) {
如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))Print("卖出订单 打开 : ", OrderOpenPrice()); else Print("错误打开卖出订单:", GetLastError())。
}
如果(EachTickMode) TickCheck = True;
如果(!EachTickMode) BarCount = Bars;
return(0);
}
}
//检查位置
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType() <= OP_SELL && OrderSymbol() == Symbol() ) {
如果(OrderType() == OP_BUY && OrderMagicNumber() ==MagicNumber ) {
//平仓
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。
如果(EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
//拖曳止损
如果(TrailingStopMode && TrailingStop > 0) {
如果(Bid - OrderOpenPrice() > Point * TrailingStop) {
如果(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
}
} else {
如果(OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber)
{
//平仓
如果(Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))))
{
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange)。
如果(EachTickMode) TickCheck = True;
如果(!EachTickMode) BarCount = Bars;
return(0);
}
//拖曳止损
如果(TrailingStopMode && TrailingStop > 0)
{
如果((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
如果((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) 。
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
}
}}
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
int ScanTrades()
{
int total = OrdersTotal();
int numords = 0;
for(int cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS)。
if(OrderSymbol() == Symbol() && OrderType() <=OP_SELLSTOP && OrderMagicNumber() == MagicNumber)
numords++;
}
return(numords);
}
//bool ExistPositions() {
// for (int i=0; i<OrdersTotal(); i++) {
// 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
// 如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
// 返回(True)。
// }
// }
// }
// return(false);
//}
double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal(); // 历史订单总数
int losses=0; // 亏损订单的数量,没有休息时间
//---- 选择手数大小
if(MaximumRisk>0)lot=NormalizeDouble(Lots*AccountFreeMargin()*MaximumRisk/1000.0,1);
//----,计算无休止的损失订单的数量
如果(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("历史错误!"); break; }
如果(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 继续。
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
如果(损失>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- 返回手数大小
如果(lot<0.1) lot=0.1;
return(lot);
}
//+------------------------------------------------------------------+
你是否得到任何错误代码 或其他东西(在回测中),给你提示出了什么问题?
#属性链接 "https://www.forex-tsd.com"
外部int MagicNumber = 1001;
外部 bool EachTickMode = False;
extern double Lots = 0.01;
extern int Slippage = 4;
extern bool StopLossMode = True;
External int StopLoss = 70;
外部 bool TakeProfitMode = True;
外来的int TakeProfit = 300;
外部 bool TrailingStopMode = True;
extern int TrailingStop = 25;
外置双倍最大风险 =0;//0.15
外置双倍递减系数 =3;
外置 int MaxOrders = 3000;
外部 bool UseHourTrade = False;
外置 int FromHourTrade = 8;
Extern int ToHourTrade = 18;
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| 专家初始化函数 |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
如果(EachTickMode)Current = 0;否则Current = 1。
return(0);
}
//+------------------------------------------------------------------+
//| 专家去初始化功能|
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| 专家启动功能|
//+------------------------------------------------------------------+
int start() {
如果(UseHourTrade){
如果(!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("交易时间还没有到来!")。
return(0);
}
}
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
int digit = MarketInfo(Symbol(),MODE_DIGITS);
如果(EachTickMode && Bars != BarCount) EachTickMode = False;
Total = OrdersTotal();
订单 = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| 信号开始 |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY;
如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| 信号结束 |
//+------------------------------------------------------------------+
//买入
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){
如果(ScanTrades() < MaxOrders) {
//检查自由保证金
如果(AccountFreeMargin() < (1000 * Lots)) {
Print("我们没有钱。Free Margin = ", AccountFreeMargin())。
return(0);
}
StopLossLevel = Ask - StopLoss * Point;
TakeProfitLevel = Ask + TakeProfit * Point;
Ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(),
NormalizeDouble(Ask,digit),
滑点。
NormalizeDouble(StopLossLevel,digit)。
NormalizeDouble(TakeProfitLevel,digit)。
"Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue)。
如果(Ticket > 0) {
如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))Print("BUY订单打开 : ", OrderOpenPrice()); else Print("错误打开BUY订单:", GetLastError())。
}
如果(EachTickMode) TickCheck = True;
如果(!EachTickMode) BarCount = Bars;
return(0);
}
}
//卖出
如果(Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){
如果(ScanTrades() < MaxOrders) {
//检查自由保证金
如果(AccountFreeMargin() < (1000 * Lots)) {
Print("我们没有钱。Free Margin = ", AccountFreeMargin())。
return(0);
}
StopLossLevel = Bid + StopLoss * Point;
TakeProfitLevel = Bid - TakeProfit * Point;
Ticket = OrderSend(Symbol(), OP_SELL, LotsOptimized(),
NormalizeDouble(Bid,digit)。
滑点。
NormalizeDouble(StopLossLevel,digit)。
NormalizeDouble(TakeProfitLevel,digit)。
"Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink)。
如果(Ticket > 0) {
如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))Print("卖出订单打开 : ", OrderOpenPrice()); else Print("错误打开卖出订单:", GetLastError())。
}
如果(EachTickMode) TickCheck = True;
如果(!EachTickMode) BarCount = Bars;
return(0);
}
}
//检查位置
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType() <= OP_SELL && OrderSymbol() == Symbol() ) {
如果(OrderType() == OP_BUY && OrderMagicNumber() ==MagicNumber ) {
//平仓
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。
如果(EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
//拖曳止损
如果(TrailingStopMode && TrailingStop > 0) {
如果(Bid - OrderOpenPrice() > Point * TrailingStop) {
如果(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
}
} else {
如果(OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber)
{
//平仓
如果(Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))))
{
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange)。
如果(EachTickMode) TickCheck = True;
如果(!EachTickMode) BarCount = Bars;
return(0);
}
//拖曳止损
如果(TrailingStopMode && TrailingStop > 0)
{
如果((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
如果((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) 。
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
}
}}
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
int ScanTrades()
{
int total = OrdersTotal();
int numords = 0;
for(int cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS)。
if(OrderSymbol() == Symbol() && OrderType() <=OP_SELLSTOP && OrderMagicNumber() == MagicNumber)
numords++;
}
return(numords);
}
//bool ExistPositions() {
// for (int i=0; i<OrdersTotal(); i++) {
// 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
// 如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
// 返回(True)。
// }
// }
// }
// return(false);
//}
double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal(); // 历史订单总数
int losses=0; // 亏损订单的数量,没有休息时间
//---- 选择手数大小
if(MaximumRisk>0)lot=NormalizeDouble(Lots*AccountFreeMargin()*MaximumRisk/1000.0,1);
//----,计算无休止的损失订单的数量
如果(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("历史错误!"); break; }
如果(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 继续。
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
如果(损失>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- 返回手数大小
如果(lot<0.1) lot=0.1;
return(lot);
}
//+------------------------------------------------------------------+我现在只用RSIFilter做回测,我确实使用了RSIMixFilter,在这个主题的几个帖子中,我发布了那个指标,我确实得到了BUYS和SELLS,所以做订单的逻辑BUY和SELL是确定的,问题是你的iCustom信号...
RSIMixFilter,不在这个主题里,对不起,它在ASK 这里。
创建了一个有利可图的EA,但它可以是两倍的好(也许),现在只有买入,没有卖出订单。
有谁知道为什么?
//+------------------------------------------------------------------+
//| 信号开始 |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0);
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY;
如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//|信号结束|
//+------------------------------------------------------------------+我做了一些回测,欧元兑美元H1从2007年4月到现在,只用了这个RSIMixFilter...
90%的建模质量,不知道为什么不显示。
创建了一个有利可图的EA,但它可以是两倍的好(也许),现在只有买入,没有卖出订单。
有谁知道原因吗?
//+------------------------------------------------------------------+
//| 信号开始 |
//+------------------------------------------------------------------+
double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0) 。
double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0);
double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
如果(sig_buy>0 && Sg>0) Order = SIGNAL_BUY;
如果(sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//|信号结束|
//+------------------------------------------------------------------+这个回溯测试,是买入和卖出还是只有其中之一?在我身上,我只得到了买入(或者在我改变代码时只得到了卖出)。
我真的没有看到任何显示错误的东西。
我现在只用RSIFilter做回测,我确实使用了RSIMixFilter,在这个主题的几个帖子中,我发布了那个指标,我确实得到了BUYS和SELLS,所以做订单BUY和SELL的逻辑是好的,问题是你的iCustom信号...
那么这样做可以吗?
double Sg=iCustom(NULL,0, "RSIFilter_v1",5,5,0,1);
if ( Sg>0 ) Order = SIGNAL_BUY;
如果(Sg<0 ) Order = SIGNAL_SELL;