下载MetaTrader 5
要添加评论,请登录注册
您不了解MQL5但是您知道如何销售?附属程序乐意为您效劳!
skydiving
13
skydiving 2010.12.26 14:54 

最近在学习,练习编程,但是做的程序出现个问题,个别时候在一个k线内会反复下单-平单-再下单-再平单。

对于循环,有点不明白,比如一根15分钟的k柱,循环的tick会走多少次?。。

如何控制一根k线内只下一次单?

想到用数组控制,

int a;

double order[];

a=Bars;

order[a]=0.0;

之后判断是否满足开仓条件(开仓条件增加一条,order[a]==0),如果满足,开仓,并且,

order[a]=1


可是,还是不好用,很困惑,望高手指点!先谢谢了!

Sean.Wood
13
Sean.Wood 2010.12.26 17:56  
//根据仓位类型获取最后一次的交易时间
datetime GetLastTrade(int type)
{
datetime lastTrade = 0;
int i;
for (i = 0; i < OrdersTotal(); i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
continue;
}
if (OrderSymbol() != Symbol())
{
continue;
}
if (OrderType() != type)
{
continue;
}
if (lastTrade < OrderOpenTime())
{
lastTrade = OrderOpenTime();
}
}
if (lastTrade == 0)
{
for (i = 0; i < OrdersHistoryTotal(); i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
continue;
}
if (OrderSymbol() != Symbol())
{
continue;
}
if (OrderType() != type)
{
continue;
}
if (lastTrade < OrderOpenTime())
{
lastTrade = OrderOpenTime();
}
}
}
return (lastTrade);
}

//判断如下

//仅举例说明买入情形 卖出情形自己做

if (GetLastTrade(OP_BUY) < iTime(Symbol(), PERIOD_M15, 0))

{

//不在当前15分钟的K柱之内 可以下单

}

else

{

//不可下单

}

skydiving
13
skydiving 2010.12.27 04:21  

非常感谢seanwood大侠!

我大概看懂了您的意思,不知道我理解的对不对,

我把datetime GetLastTrade(int type) 这个函数的这一段,放在主程序的最后面,int start() {定义变量,下单,平单判断等; 之后是函数 datetime GetLastTrade(int type) }, 把买入情形/卖出情形的加在下单的判断里。

可是,返回了以下一些错误:

‘{’ function definition unexpected

'type' - variable not defined

'lastTrade' - variable not defined

'type' - variable not defined

'}' - unbalanced parentheses


我的程序,在加进之前,编译无错误。 怀疑放的位置不对,试着换了,仍不可以。。 本人愚钝,望再赐教,非常感谢!

秋风踏浪
166
秋风踏浪 2010.12.27 09:37  

static datetime openTime;

if(Time[0] != openTime)

{

//不在此柱内

......

openTime = Time[0];

}

else

{

//在同一柱内

}

Sean.Wood
13
Sean.Wood 2010.12.27 14:04  

错了

MQL是面向过程的语言,不能在一个函数内部声明另一个函数

你必须将 GetLastTrade这一段单独声明在start init等函数之外

顺便说一句dmgy的方法不可取 理由是判断不正确且依赖于图表的周期

正确的用法是这样的

int start()

{

//.............你自己的代码

//然后这里是判断代码

if (GetLastTrade(OP_BUY) < iTime(Symbol(), PERIOD_M15, 0))

{

//不在当前15分钟的K柱之内 可以下单

}

else

{

//不可下单

}

}

//然后这里是GetLastTrade函数的声明

datetime GetLastTrade(int type)

{

//函数内容................

}

skydiving
13
skydiving 2010.12.27 16:20  

非常感谢seanwood! 已经好用了!

我接触mql4的时间还比较短,以前有点编程的基础,但对mql4还不熟悉,还需要多努力学习练习,希望有机会跟seanwood多交流!

dmgy的我还没有试验,在这里也谢谢了~

Sean.Wood
13
Sean.Wood 2010.12.28 06:12  
我在国内一家大的娱乐公司做IT方面的编程 如果你有好的策略且愿意和我分享 不妨交流一下 我可以帮你实现 我的QQ2300070
秋风踏浪
166
秋风踏浪 2010.12.28 16:48  

/
要添加评论,请登录注册