很有可能,你想想 计算是如何随时间变化的,就明白了。
0 意味着在这个5分钟间隔内,其值不断变化, Close值只有在这5分钟完结后才是确定值。
建议 间隔值最好要大于1, 如 X 对 x+n, n>1.
比如如果 在交叉点相等,怎么判断? 至少需要3个时间周期, 只有两个点,就是指望它在两个相邻点之间交叉。
两个相邻点之间,不容易分辨出来的。
任何数学的道理 实际使用时要估计下误差范围和实现可能,数学服从现实。不是现实服从数学。
很有可能,你想想 计算是如何随时间变化的,就明白了。
0 意味着在这个5分钟间隔内,其值不断变化, Close值只有在这5分钟完结后才是确定值。
建议 间隔值最好要大于1, 如 X 对 x+n, n>1.
比如如果 在交叉点相等,怎么判断? 至少需要3个时间周期, 只有两个点,就是指望它在两个相邻点之间交叉。
两个相邻点之间,不容易分辨出来的。
任何数学的道理 实际使用时要估计下误差范围和实现可能,数学服从现实。不是现实服从数学。
谢谢DxdCn 的解答
其实当前柱并不是没有实现死叉的条件,可就是能打印,不能成交,我加上打印语句后显示如下:
if(StrToTime("2009.11.23 06:49")<Time[0] && StrToTime("2009.11.23 07:00")>Time[0])
if(MACDS1<MACDM1 && MACDS0>MACDM0)
{Print(TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)," MACDS1=",MACDS1," MACDM1=",MACDM1," MACDS0=",MACDS0," MACDM0=",MACDM0);}
//==================打印结果
EURUSD,M5: 2009.11.23 06:57 MACDS1=0.0076 MACDM1=0.008 MACDS0=0.0077 MACDM0=0.0076
EURUSD,M5: 2009.11.23 06:58 MACDS1=0.0076 MACDM1=0.008 MACDS0=0.0077 MACDM0=0.0076
EURUSD,M5: 2009.11.23 06:58 MACDS1=0.0076 MACDM1=0.008 MACDS0=0.0076 MACDM0=0.0075
EURUSD,M5: 2009.11.23 06:58 MACDS1=0.0076 MACDM1=0.008 MACDS0=0.0077 MACDM0=0.0076
你把这段打印代码放到下单函数那条语句后面。先看下是否进入了IF。再分析。
估计是_time!=Time[0] && MACDM0>0这两个条件使得,程序未进入if中。
另外,看下是否有错误信息。
那你把浮点数变成整数,在比较大小。 就是把 0.0076 变成76后再比较
因为浮点数比较 有时是不准确的。
您好,DxdCn
根据您的解答,我修改如下,可是问题依旧,还是不能下单,您帮看看,是我的不足,还是MT的一个漏洞。
//-----
int intt=MathPow(10,MarketInfo(Symbol(),MODE_DIGITS)+2);
double MACDM0=MathFloor(intt*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0));
double MACDM1=MathFloor(intt*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1));
double MACDS0=MathFloor(intt*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0));
double MACDS1=MathFloor(intt*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1));
//--------
//--------打印结果如下
EURUSD,M5: 2009.11.23 06:57 MACDS1=760 MACDM1=797 MACDS0=765 MACDM0=758
EURUSD,M5: 2009.11.23 06:58 MACDS1=760 MACDM1=797 MACDS0=765 MACDM0=758
EURUSD,M5: 2009.11.23 06:58 MACDS1=760 MACDM1=797 MACDS0=764 MACDM0=750
EURUSD,M5: 2009.11.23 06:58 MACDS1=760 MACDM1=797 MACDS0=765 MACDM0=758
//-------
另外根据xfxyldj 朋友的说法,我把打印语句放在判断下单条件之后的“}”下,问题依旧,我想这就不涉及执行次序的问题,
或者说数据只使用一次的问题。注:我的下单语句是没有问题的,这个时间的前后都有单子能成交
//----
if(下单条件成立吗)
{下单语句}
打印命令
这样试试。
int check_direction_big() { double OsMA[2]; int flag=0; OsMA[0] = iOsMA(NULL, 0, 12, 26, 9, PRICE_CLOSE, 0); OsMA[1] = iOsMA(NULL, 0, 12, 26, 9, PRICE_CLOSE, 1); if (OsMA[1] > 0 && OsMA[0] < 0) flag = -1; elseif (OsMA[1] < 0 && OsMA[0] > 0) flag = 1; return(flag); } void start() { int flag; flag = check_direction_big(); if (flag > 0) // 买入 else if (flag < 0) // 卖出 return; }
{Print(TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)," MACDS1=",MACDS1," MACDM1=",MACDM1," MACDS0=",MACDS0," MACDM0=",MACDM0); //这Print有记录
OrserSend(....); //这OrderSend也有记录呀,怎么不提供呢?
}
既然这样Print能通过,判断就没问题。
那么OrderSend 的记录呢? 那记录里面还有其它的记录呢?
调试调试,不要吝啬记录。不要让帮你的人猜谜呀
代码中有 int SOK=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Bid+20*Point,Bid-5*Point,"YYY",111,0,Blue);
那SOK也要Print出来。 Bid-5*Point 5个点是否允许?
您好,DxdCn
根据您的解答,我修改如下,可是问题依旧,还是不能下单,您帮看看,是我的不足,还是MT的一个漏洞。
//-----
int intt=MathPow(10,MarketInfo(Symbol(),MODE_DIGITS)+2);
double MACDM0=MathFloor(intt*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0));
double MACDM1=MathFloor(intt*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1));
double MACDS0=MathFloor(intt*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0));
double MACDS1=MathFloor(intt*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1));
//--------
//--------打印结果如下
EURUSD,M5: 2009.11.23 06:57 MACDS1=760 MACDM1=797 MACDS0=765 MACDM0=758
EURUSD,M5: 2009.11.23 06:58 MACDS1=760 MACDM1=797 MACDS0=765 MACDM0=758
EURUSD,M5: 2009.11.23 06:58 MACDS1=760 MACDM1=797 MACDS0=764 MACDM0=750
EURUSD,M5: 2009.11.23 06:58 MACDS1=760 MACDM1=797 MACDS0=765 MACDM0=758
//-------
另外根据xfxyldj 朋友的说法,我把打印语句放在判断下单条件之后的“}”下,问题依旧,我想这就不涉及执行次序的问题,
或者说数据只使用一次的问题。注:我的下单语句是没有问题的,这个时间的前后都有单子能成交
//----
if(下单条件成立吗)
{下单语句}
打印命令
你这样弄不对,我说的意思是吧这段print语句放到下单语句那个{}里面,与下单语句并列。检查是否进入了IF操作。你放}后面就不是在if语句里面了,无法判断
if(_time!=Time[0] && MACDM0>0 && MACDS1<MACDM1 && MACDS0>MACDM0)
这个条件是否成立了。
你先要检查这个条件是否成立,如果这个条件都不成立,下单语句根本没有运行。没有意义的。
if(下单条件成立吗)
{
下单语句;
if(是检测的时间吗)
{
}
}
用这样的逻辑嵌套
另外有问题的那个信号前后有订单成交不能说明,这个信号能满足IF条件。
我的意思你要先检查,特定的时间,是否进入了下单这个IF中。
如果确定进入IF了,但是ordersend没有执行,还没有错误提示,那就很可能是BUG了。
另外有问题的那个信号前后有订单成交不能说明,这个信号能满足IF条件。
我的意思你要先检查,特定的时间,是否进入了下单这个IF中。
如果确定进入IF了,但是ordersend没有执行,还没有错误提示,那就很可能是BUG了。
xfxyldj 谢谢您的回复
根据您的说法,经测试,问题依旧,只有这个时间点位进不了下单判断句里,其它的都行。
/---
/---------------以下是我在判断句内外都加上打印后的日志:
11:10:52 ABC EURUSD,M5: loaded successfully
11:10:52 TestGenerator: unmatched data error (volume limit 70 at 2009.11.23 10:05 exceeded)
11:10:52 ABC started for testing
11:10:52 2009.11.23 00:00 ABC EURUSD,M5: open #1 sell 0.01 EURUSD at 1.4855 sl: 1.4875 tp: 1.4850 ok
11:10:52 2009.11.23 00:00 ABC EURUSD,M5: 2009.11.23 00:00
11:10:52 2009.11.23 00:00 ABC EURUSD,M5:
11:10:52 2009.11.23 00:18 Tester: take profit #1 at 1.4850 (1.4848 / 1.4850)
11:10:52 2009.11.23 01:50 ABC EURUSD,M5: open #2 sell 0.01 EURUSD at 1.4855 sl: 1.4875 tp: 1.4850 ok
11:10:52 2009.11.23 01:50 ABC EURUSD,M5: 2009.11.23 01:50
11:10:52 2009.11.23 01:50 ABC EURUSD,M5:
11:10:52 2009.11.23 01:55 ABC EURUSD,M5: open #3 sell 0.01 EURUSD at 1.4860 sl: 1.4880 tp: 1.4855 ok
11:10:52 2009.11.23 01:55 ABC EURUSD,M5: 2009.11.23 01:55
11:10:52 2009.11.23 01:55 ABC EURUSD,M5:
11:10:52 2009.11.23 02:00 Tester: stop loss #2 at 1.4875 (1.4873 / 1.4875)
11:10:52 2009.11.23 02:04 Tester: stop loss #3 at 1.4880 (1.4878 / 1.4880)
11:10:52 2009.11.23 03:05 ABC EURUSD,M5: open #4 sell 0.01 EURUSD at 1.4894 sl: 1.4914 tp: 1.4889 ok
11:10:52 2009.11.23 03:05 ABC EURUSD,M5: 2009.11.23 03:05
11:10:52 2009.11.23 03:05 ABC EURUSD,M5:
11:10:52 2009.11.23 03:15 Tester: take profit #4 at 1.4889 (1.4887 / 1.4889)
11:10:53 2009.11.23 04:50 ABC EURUSD,M5: open #5 sell 0.01 EURUSD at 1.4919 sl: 1.4939 tp: 1.4914 ok
11:10:53 2009.11.23 04:50 ABC EURUSD,M5: 2009.11.23 04:50
11:10:53 2009.11.23 04:50 ABC EURUSD,M5:
11:10:53 2009.11.23 05:56 Tester: stop loss #5 at 1.4939 (1.4937 / 1.4939)
11:10:53 2009.11.23 06:57 ABC EURUSD,M5: 2009.11.23 06:57
11:10:53 2009.11.23 06:58 ABC EURUSD,M5: 2009.11.23 06:58
11:10:53 2009.11.23 06:58 ABC EURUSD,M5: 2009.11.23 06:58
11:10:53 2009.11.23 06:58 ABC EURUSD,M5: 2009.11.23 06:58
11:10:53 2009.11.23 08:21 ABC EURUSD,M5: open #6 sell 0.01 EURUSD at 1.4935 sl: 1.4955 tp: 1.4930 ok
11:10:53 2009.11.23 08:21 ABC EURUSD,M5: 2009.11.23 08:21
11:10:53 2009.11.23 08:21 ABC EURUSD,M5:
11:10:53 2009.11.23 08:37 Tester: take profit #6 at 1.4930 (1.4928 / 1.4930)
11:10:54 2009.11.23 10:00 ABC EURUSD,M5: open #7 sell 0.01 EURUSD at 1.4956 sl: 1.4976 tp: 1.4951 ok
11:10:54 2009.11.23 10:00 ABC EURUSD,M5: 2009.11.23 10:00
11:10:54 2009.11.23 10:00 ABC EURUSD,M5:
11:10:54 2009.11.23 10:08 Tester: stop loss #7 at 1.4976 (1.4974 / 1.4976)
11:10:55 2009.11.24 01:55 ABC EURUSD,M5: open #8 sell 0.01 EURUSD at 1.4961 sl: 1.4981 tp: 1.4956 ok
11:10:55 2009.11.24 01:55 ABC EURUSD,M5: 2009.11.24 01:55
11:10:55 2009.11.24 01:55 ABC EURUSD,M5:
11:10:55 2009.11.24 01:59 Tester: take profit #8 at 1.4956 (1.4953 / 1.4955)
11:11:02 2009.11.24 12:15 ABC EURUSD,M5: open #9 sell 0.01 EURUSD at 1.4935 sl: 1.4955 tp: 1.4930 ok
11:11:02 2009.11.24 12:15 ABC EURUSD,M5: 2009.11.24 12:15
11:11:02 2009.11.24 12:15 ABC EURUSD,M5:
11:11:02 2009.11.24 12:46 Tester: stop loss #9 at 1.4955 (1.4953 / 1.4955)
11:11:02 2009.11.24 15:05 ABC EURUSD,M5: open #10 sell 0.01 EURUSD at 1.4977 sl: 1.4997 tp: 1.4972 ok
11:11:02 2009.11.24 15:05 ABC EURUSD,M5: 2009.11.24 15:05
11:11:02 2009.11.24 15:05 ABC EURUSD,M5:
11:11:02 2009.11.24 15:14 Tester: take profit #10 at 1.4972 (1.4969 / 1.4971)
11:11:03 2009.11.24 16:10 ABC EURUSD,M5: open #11 sell 0.01 EURUSD at 1.4979 sl: 1.4999 tp: 1.4974 ok
11:11:03 2009.11.24 16:10 ABC EURUSD,M5: 2009.11.24 16:10
11:11:03 2009.11.24 16:10 ABC EURUSD,M5:
11:11:03 2009.11.24 16:22 Tester: take profit #11 at 1.4974 (1.4972 / 1.4974)
11:11:04 2009.11.24 20:50 ABC EURUSD,M5: open #12 sell 0.01 EURUSD at 1.4963 sl: 1.4983 tp: 1.4958 ok
11:11:04 2009.11.24 20:50 ABC EURUSD,M5: 2009.11.24 20:50
11:11:04 2009.11.24 20:50 ABC EURUSD,M5:
11:11:04 2009.11.24 21:07 Tester: stop loss #12 at 1.4983 (1.4981 / 1.4983)
11:11:04 2009.11.24 21:35 ABC EURUSD,M5: open #13 sell 0.01 EURUSD at 1.4972 sl: 1.4992 tp: 1.4967 ok
11:11:04 2009.11.24 21:35 ABC EURUSD,M5: 2009.11.24 21:35
11:11:04 2009.11.24 21:35 ABC EURUSD,M5:
11:11:04 2009.11.24 22:13 Tester: take profit #13 at 1.4967 (1.4965 / 1.4967)
double MACDM0=10*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
double MACDM1=10*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
double MACDS0=10*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
double MACDS1=10*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
if(_time!=Time[0] && MACDM0>0 && MACDS1<MACDM1 && MACDS0>MACDM0)
{
int SOK=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Bid+20*Point,Bid-5*Point,"YYY",111,0,Blue);
if(SOK>0) _time=iTime(NULL,Period(),0);
}
时间是2009.11.23 6:50~7:00有成交条件,周期是M5, EURUSD, 图示红箭头处死叉,MACD用的是默认参数12,26,9
平台是FXDD,如此简单明显的死叉,却不成交,极度郁闷中,求各位朋友解救。
如果把取值0,1改为取1,2时,却能成交,你说郁不郁闷
double MACDM0=10*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
double MACDM1=10*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
double MACDS0=10*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
double MACDS1=10*iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);
请各位朋友指正我这里到底是怎么了,先谢了。