Bar上平仓后满足开仓条件不再开仓
来源:互联网 发布:哪个网络验证好 编辑:程序博客网 时间:2024/04/30 19:59
在K1这根Bar上达到了平仓条件已经平仓,但是平仓后满足开仓条件。造成开仓—平仓—开仓循环(假锁现象,至少重复10多次,交易费攀升),如何实现平仓后的Bar不再开仓?
每Bar的时间周期内,能够TICK多次。
问题一:程序每TICK就下一次单,如何防止重复下单呢?
问题一:程序每TICK就下一次单,如何防止重复下单呢?
====================
问题二:比如,我在1.3600下了单,当他涨到1.3620,没平,之后返回来到1.3600,还会再下一个单的,这个单是多余的,我希望在1.3590到1.3610之间都不下单了,如何办到?但是如果平了1.3600这个单的话可以再下。
或者你可以加上函数模块
bool isNewBar()
{ static datetime TimeBar=0;
bool flag=false;
if(TimeBar!=Time[0])
{
TimeBar=Time[0];
flag=true;
}
return (flag);
}
{ static datetime TimeBar=0;
bool flag=false;
if(TimeBar!=Time[0])
{
TimeBar=Time[0];
flag=true;
}
return (flag);
}
//============================
在一个k线内会反复下单-平单-再下单-再平单。
对于循环,有点不明白,比如一根15分钟的k柱,循环的tick会走多少次?。。
如何控制一根k线内只下一次单?
想到用数组控制,
int a;
double order[];
a=Bars;
order[a]=0.0;
之后判断是否满足开仓条件(开仓条件增加一条,order[a]==0),如果满足,开仓,并且,
order[a]=1
可是,还是不好用,很困惑,望高手指点!先谢谢了!
//根据仓位类型获取最后一次的交易时间
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);
}
//判断如下
datetime GetLastTrade(int type)
{
}
//判断如下
//仅举例说明买入情形 卖出情形自己做
if (GetLastTrade(OP_BUY) < iTime(Symbol(), PERIOD_M15,0))
{
}
else
{
}
=================
MQL是面向过程的语言,不能在一个函数内部声明另一个函数。你必须将 GetLastTrade这一段单独声明在startinit等函数之外。
---------------------------dmgy的方法
static datetime openTime;
if(Time[0] != openTime)
{
//不在此柱内
......
openTime = Time[0];
}
else
{
//在同一柱内
}
static datetime openTime;
if(Time[0] != openTime)
{
//不在此柱内
......
openTime = Time[0];
}
else
{
//在同一柱内
}
-------------------dmgy的方法结束-----------------------------------
顺便说一句dmgy的方法不可取 理由是判断不正确且依赖于图表的周期
正确的用法是这样的
int start()
{
//.............你自己的代码
//然后这里是判断代码
if (GetLastTrade(OP_BUY) < iTime(Symbol(),PERIOD_M15, 0))
{
//不在当前15分钟的K柱之内 可以下单
}
else
{
//不可下单
顺便说一句dmgy的方法不可取 理由是判断不正确且依赖于图表的周期
正确的用法是这样的
int start()
{
//.............你自己的代码
//然后这里是判断代码
}
//然后这里是GetLastTrade函数的声明
datetime GetLastTrade(int type)
{
//函数内容................
}
datetime GetLastTrade(int type)
{
//函数内容................
}
0 0
- Bar上平仓后满足开仓条件不再开仓
- 奇偶剪枝问题 深搜搜到满足条件的路径时,不再搜其他路径
- 满足条件的整数
- 满足条件的整数
- 满足条件的n
- 缓存满足的条件
- 正则表达式 循环 满足条件
- POJ2941:满足条件的整数
- 求满足条件的序列
- 求满足条件的和
- 找出满足条件的数
- 找到满足条件的数组
- 求满足条件的路径
- 满足条件的整数 - 详解
- 满足特异条件的数列
- 判断满足条件的三位数
- 试找出满足下列条件的三位数
- hibernate查询满足指定条件的记录
- jdk1.8降级为1.7旧版本
- java java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 5 to TIMESTAMP.
- OM——2Way V3.6a_EN
- OM_2WAY_v3.6a
- FxPro针对MT4推出全新EA策略工具——…
- Bar上平仓后满足开仓条件不再开仓
- 单纯缴纳社会保险关系不意味…
- 网络协议栈设计(八)---网络层ARP协议代码实现(发送)
- 行情EA自建20160921
- 省政府令〔2001〕第9号河北省失业…
- 【知识整理】Spring整合Hibernate详解
- How to open an app from an unidentified developer
- 2011人保部令第13号实施《中华人民…
- 【转载】qsort函数、sort函数 (精心整理篇)