新手学用A函数编程.请帮助看一下逻辑性 [开拓者 TB]
- 咨询内容:
本帖最后由 xiaosong 于 2013-7-20 12:01 编辑
我用交易开拓者几天,这个软件的确能解决执行力的问题,但是坑爸的事,编程的确有一点难.
下面是我的思维(才学习几天,如何止损原码看不懂,还是日内时间控制也是搞不清楚)
1:如果A>B是开多条件
2: 如果A<B是平多条件
3:如果C>D是开空条件
4:如果C<D是平空条件
固定交易一手.
对信号消失的处理
1:如果开多信号出现后,信号又消失,也开仓,如果再出现开多信号就不开多仓. 如果出现反向的开空信号就,就平多仓,开空仓
2:开空也是一样如处理了
bigen
................................
..................................
if(A_TotalPosition()=0) \\返回当前公式应用的帐户下当前商品的总持仓 (无持仓)
{
IF(A>B) \\开多条件
{
if(A_BuyPosition()=0) \\返回当前公式应用的帐户下当前商品的买入持仓 \\没有多仓持仓 ( 我想了一下,前面的入口是没有持多仓空仓,才能进来.所以,这里是不是,满足了开多条件,直接开多仓了?不要这个IF)
{
A_SendOrder(..........) \\针对当前公式应用的帐户、商品发送委托单 \\开仓一手
}
}
} els IF(C>D) \\ 开空条件
{
IF(A_SellPosition()=0) \\\\返回当前公式应用的帐户下当前商品的卖出持仓 \\没有持空仓 (( 我想了一下,前面的入口是没有持多仓空仓,才能进来.所以,这里是不是,满足了开空条件,直接开多仓了?不要这个IF)
{
A_SendOrder(..........) \\针对当前公式应用的帐户、商品发送委托单 \\开空仓一手
}
}
}else if(A_BuyPosition()!=0) \\ 有多仓的情况
{ IF(C>D) \\ 开空条件 \\ 有持多仓的情况,出现了开空信号处理
{
A_SendOrder(..........) \\平多仓
A_SendOrder(..........) \\开空仓
} else if( 开多仓的价格-k最高价)>=20) \\\止损 在持多仓的情况,如果下跌,下跌超过20点止损
{ A_SendOrder(..........) \\平多仓
} else if(A<B) \\平多条件 ,在持多仓的情况,如果上跌,达到平多条件平仓
{
A_SendOrder(..........) \\平多仓
}
} else if( A_SellPosition()!=0)\\ 有空仓的情况
{
IF(A>B) \\开多条件 有持空仓的情况,出现了开多信号处理
{ A_SendOrder(..........) \\平空仓
A_SendOrder(..........) \\开多仓
} else if(开空仓的价格-k最低价)>=-20) \\\止损 在持空仓的情况,如果上跌,上涨超过20点止损
{ A_SendOrder(..........) \\开空仓
} else If( C<D) \\是平空条件 在持空仓的情况,如果下跌,达到平空条件平仓
{
A_SendOrder(..........) \\平空仓
}
}
end
各位大哥,我是新人,请指教小弟,看一下有没有什么逻辑性错误了...
谢谢 - TB技术人员:
还有几个问题请教.
1:如开盘后15后才交易,收盘前14.55平仓.
(1):网上有原码,我也看不懂。请教
要把原码放在那里了?????????????????????????????????????????????????????
2:Return;
在网上,有一些函数加得有Return; Return;是返回
(1)加与不加有什么差异?
(2):我上面要加吗?
- TB客服:
本帖最后由 xiaosong 于 2013-7-20 15:32 编辑
又经过几个小时的奋斗,搞出来的止损,日内时间控制,与收盘前平仓.
那位朋友来看一下有错误吗?
Params
Numeric Lots(1);单次开仓手数
Numeric tradBegin(930); 开仓时间
Numeric tradEnd(1456); 开仓截止时间
Numeric mycputime(14.58); //电脑时间 收盘前平仓
Numeric N(2); //相对买卖盘的偏移值
Numeric K(0); //0为多空都平;1为只平多单;-1为只平空单
bigen
................................
..................................
if(Time>=0.0001*tradBegin And Time<=0.1500) if( CurrentTime*100 >=tradBegin and tradEnd>=CurrentTime*100) \\两种方案,不知那种方案正确
{
if(A_TotalPosition()=0) \\返回当前公式应用的帐户下当前商品的总持仓 (无持仓)
{
IF(A>B) \\开多条件
{
A_SendOrder(Enum_Buy,Enum_Entry,lost,Q_AskPrice()+N*MinMove*PriceScale);
)\\发送委托单 开多仓一手
}
} else IF(C>D) \\ 开空条件
{
A_SendOrder(Enum_Sell,Enum_Entry,lost,Q_BidPrice()-N*MinMove*PriceScale); \\发送委托单 开空仓一手
}
}else if(A_BuyPosition>0) \\ 持多仓的情况
{ IF(C>D) \\ 在持多仓的情况,出现开空信号的处理
{
A_SendOrder(Enum_Sell,Enum_Exit, A_sellPosition(),Q_BidPrice()-N*MinMove*PriceScale); \\平多仓
A_SendOrder(Enum_Sell,Enum_Entry,lost,Q_BidPrice()-N*MinMove*PriceScale); \\开空仓
} else if( A_BuyAvgPrice()-Q_BidPrice>20) \\\止损 在持多仓的情况,如果下跌,下跌超过20点止损
{ A_SendOrder(Enum_Sell,Enum_Exit, A_BuyPosition,Q_BidPrice()-N*MinMove*PriceScale); \\平多仓 注:是平仓,不是平今
} else if(A<B) \\在持多仓的情况,达到平多条件平仓
{
A_SendOrder(Enum_Sell,Enum_Exit, A_BuyPosition(),Q_BidPrice()-N*MinMove*PriceScale); \\平多仓
}
} else if(A_SellPosition>0)\\ 持空仓的情况
{
IF(A>B) \\在持空仓的情况,出现了开多信号处理
{ A_SendOrder(Enum_Buy,Enum_Exit,A_sellPosition(),Q_AskPrice()+N*MinMove*PriceScale); \\平空仓
A_SendOrder(Enum_Buy,Enum_Entry,lost,Q_AskPrice()+N*MinMove*PriceScale); \\开多仓
} else if(Q_AskPrice-A_SellAvgPrice)>20) \\止损 在持空仓的情况,如果上跌,上涨超过20点止损
{
A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition,Q_BidPrice()+N*MinMove*PriceScale);\\平空仓
} else If( C<D) \\在持空仓的情况,达到平空条件平仓
{
A_SendOrder(Enum_Buy,Enum_Exit,A_sellPosition(),Q_BidPrice()+N*MinMove*PriceScale);\\平空仓
}
} else If(CurrentTime*100 >= mycputime ) //平仓时间设置
{
If (A_BuyPosition()>0 && A_GetOpenOrderCount()==0 and K>=0)
{
A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice()-N*MinMove*PriceScale);
}
If (A_sellPosition()>0 && A_GetOpenOrderCount()==0 and K<=0)
{
A_SendOrder(Enum_Buy,Enum_Exit,A_sellPosition(),Q_AskPrice()+N*MinMove*PriceScale);
}
}
}
end
- 网友回复:
本帖最后由 xiaosong 于 2013-7-20 17:49 编辑
版主老大,各位论坛上的朋友在吗?
上面的我的公式中,
1:用A函数在,在一根K线会,发生反复发单的情况吗?
2:达到条件后开仓后,马上进去有仓的入口,在有入仓的入口,只有三个条件入口: 反向开仓平仓入口,止损入口, 按要求平仓入口.
没在再开多样仓向的入口
3:我在这个公式中,要用全局变量吗? - 网友回复:
昨晚与今天在网看了一天的贴.
1:每当Tick来时,如果激发开仓条件,就会发单.
A_SendOrder(Enum_Buy,Enum_Entry,Lots,Q_AskPrice()+N*MinMove*PriceScale);//发送委托单 开多仓一手
虽然if(A_TotalPosition()==0),是没有持仓时的入口,好相if(A_TotalPosition()==0)能控制,有持仓时不进来.
但是因为时间的延时,发单成交的数据迟迟不返回,断网..或者发单不成交.
在上一个发单(Tick激发开仓条件)------------------又一次Tick激发开仓条件--------------------到发单交成返回之间.
就会二次运行.
if(A_TotalPosition()==0),
{
}
这就发二次单,如果都成交,就会成交二次.
2:这种Tick激发方式,能保证成交的及时性. 如果都采用Bar方式,价格就差很多.
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 1145508240 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容