专业正规安全的配资公司炒股平台门户网
关键词不能为空

期货配资

导航

「期货程序化 函数ref 没有被声明」求助MATLAB期货

未知
admin

程序化模型失效的风险

在量化投资策略的开发过程中,一套模拟运行表现优异的策略,在实际投入运行后就表现不佳,甚至出现连续性的亏损,让许多策略开发者痛苦不堪。此时策略是否继续运行是基金管理者所面临的一个非常难的选择。

01 失效——策略模型的必然结局?

现实世界的复杂性决定了没有一个模型能够涵盖现实世界的所有特征,只能采取简化的办法,通过突出显示某些特点来描述真实的世界。而简化的结果就是我们将某些局部的特性看成是现实事物本身,这种以局部特征代替整体的方法,使得策略模型本身就具备很大的局限性。

另外,在金融市场上,投资者的情绪以及未来的期望对资产的价格有着重大的影响,而这些主观性的想法却较容易发生较大的改变,使得市场运行的特征也发生改变,模型失效也就必然了。

交易者在判断市场中存在的真理时,通常都是把历史行情中某些特定的规律当做现在的市场真理,可是时间在走,市场特征也跟着变化,市场的规律也会变化,自然而然的策略模型也就失效了。

展开剩余70%

简单点说:刚开始你自己穿了一身自己设计的衣服,它是独一无二的。可是你穿出去之后,大家都仿照着制作出来,他就失去了它的独一无二的特性。这就是众所周知的策略容载量的问题,利用的人数越多,它的有效性越低。

在程序化交易中,策略模型的实质是按照既定的规则进行买卖交易。投资者依据经验或者数理化的方法从历史行情中发掘出某些特定的规律,然后据此制定出相应的买卖规则。因此,规则本身是对行情的简化,将历史行情中某些特定的规律看成市场普遍的真理,但不同时间内,市场规律会呈现出不一样的特征,策略模型也就失效了。

还有一个就是市场有效性的问题。和资本市场作斗争,基本上是不可能赢的,其实就是说大部分的交易模型都是有时间限制的,不是长期有效的,程序化交易在国内的发展趋势很快,说明会有越来越多的策略模型被研发出来,所以模型的失效只是时间的问题。市场在不断的变化,我们的交易模型也要跟随市场进行调整,来适应行情的发展,无论你的策略模型表现是有多好,都要跟随市场的变化而变化。

02 如何断定策略已经失效

如果我们无法阻止策略模型由高效转向低效,进而失效的命运,那留下来的问题就是该如何判定他是否已经失效。

在未来行情不可知的前提下,判断模型是否依然有效是很难的。在此提出两点思路供参考:

一、观察模型是不是还在有效地执行交易策略,体现出来的交易逻辑是不是和之前设计的初衷是一样的。以下的情况出现,大家就要提高警惕了:对行情的敏感度降低,开仓时机滞后现象频繁,胜率或盈亏比连续出现很大的变化等,当然这是从交易结果上看,被动发现失效的方法。

一般情况下,周月线级别上的连续亏损和最大回辙是我们主要关注的地方。但是有一个问题大家要注意:策略连续回撤的原因到底是什么?是策略失效造成的,还是行情导致的,应用程序化交易的都知道,在震荡行情中,策略回撤是不可避免的。假如模型出现问题表现在当前阶段,模型所表征的行情特点又一次呈现时,它还是有效的。

二、观察市场的运营特点是不是发生了变化,假如变化了,则证明模型可能失效了。举个例子:一部分非常依赖特定交易指令的模型,会因为交易规则的调整而失去效果,或者在市场中套利交易有效性大幅度改善时,盈利能力大幅度降低都是属于一个类型的。

另一个需要关注的是反程序化交易策略。随着程序化交易越来越成为市场一个重要的组成部分,程序化交易资金量日趋增大,市场出现了专门研究反程序化的交易策略,即通过采取与大多数程序化交易者相反的操作策略,获取程序化交易者的部位头寸来得到收益。

03 总结

总的来说,从长期来看,投资者主观风险态度较易发生较大幅度的改变,因此市场的行情特征必然在不同时间内呈现出不同的特征,而经过简化后的模型以局部特性代替市场本身,使得模型自身具有很强的内在局限性,难以适应不同的行情。

求助MATLAB期货程序化交易编写问题

都免费试用知道坏真要找适合自程序化软件试用每款软件都定客户赞贬且都些理由所建议申请试用且需要功能关些软件都些特色比:便宜功能简单数据功能强编写语言难等 所适合自才办 金字塔免费版功能: 内全推期货数据 超级图表析 闪电单功能 自编函数功能 VBA二发功能 交易策略测试优化 简单图表程式化交易 A股、外汇外盘全推数据 高端新图表程式化交易

期货软件中进行程序化交易时可以调用CTP接口的命令吗

可以的,不过一般客户是难以获得CTP接口的授权的,既是你获得了调用的模块代码,但是你没有期货公司的授权,交易指令是无法报进交易所的! 如果您或得了期货公司的授权,那么公司会给您交易的模块代码(封装好的DLL文件),您在您的程序里面调用CTP接口里面就可以,不过开拓者目前不能直接调用DLL文件的CTP接口,像文华财经,金字塔,开拓者,只能在系统函数里面自己增加需要的函数,而无法直接调用程序之外的应用!

国内有没有免费的期货程序化交易软件?求前辈推荐!!

想下也是清楚,免费的软件能有多好用 现在程序化交易一般就是文华和开拓者的比较多 金字塔也还可以 你可以综合考虑,日内交易多,那就按年 不然就是按手加收 如果交易量大,那可以考虑给报销这部分的费用 具体可以咨询

期货程序化下单违法吗

看你是什么样的程序了,一般说来都是合法的,如果你自买自卖肯定是违法了,至于高频交易,现在各国都在围堵!还没明确说高频交易违法!

期货程序化交易源代码怎么开发

    使用现成的交易平台,学习交易系统的语法,将自己的交易思路转换成公式,然后执行。使用CTP交易接口,使用C++将自己的交易思路转换成程序代码,然后执行。

期货程序化交易系统是如何实现的,用的是什么编程语言

、程序化交易系统目前主要是通过计算机程序实现的,其实就是把交易者决策的过程用计算机语言描述出来,然后由计算机给出交易建议或直接发送交易指令到期货公司的交易系统中去,完成一笔交易。 比如我们用自然语言思考某个品种是否应该买入卖出时:“如果大豆0901价格跌破3000元,则开仓卖出三分之一......”用计算机语言描述时可能就是: “IF A0901<=3000 THEN SELL......” 当然实际上的程序编写是比较复杂的,因为要做大量的逻辑判断和公式计算。 2、 理论上来讲,用什么语言都可以完成这样的任务,但因为涉及到大量的数据读写和网络存取,所以最好用自带数据库功能的编程语言,比如Delphi,不但数据 库功能很强,而且可直接读写SQL-Server、Oracle、Sybase等证券期货行业普遍采用的数据库,相应的网络控件也齐全。 3、此类交易系统适合所有的交易市场,证券、期货、外汇都已经有了类似的交易系统,但各自的模型基础不一样,因为这些软件都是根据交易者的经验来建立交易模型并编写的,而不同的交易者思路是不完全相同的。 4、在证券市场和期货市场上,如果个人要建立一个计算机程序化交易系统的话,首先要做的当然是建立交易模型,也就是把自然语言描述的交易决策过程转换成计算机语言。 其次是建立交易接口,这里有两个接口问题要解决,一是你的交易程序要读取行情软件的数据,以便系统根据行情数据作出交易决策并发出交易指令;二是你的交易程序发出的指令要下到证券公司(期货公司)的交易服务器上去,就像你自己敲单一样。 接口问题涉及到TCP/UDP端口的读写,证券(期货)公司和交易所的通信都是通过TCP/UDP进行的,他们不对最终客户开放接口,这就需要你自己破解数据格式了。 所以要建立一套有效的程序化交易系统,不但要求程序的编写者有成功的、长期有效的交易经验,还要懂得将这些经验用计算机语言描述出来,这不是一个很简单的过程。

可不可以开通个人的期货程序化交易账户,如果可以的话

可以 看个人的喜好,现在有不少是用程序化交易 文华和开拓者是程序化交易的代表 用的客户很多 不过对个人来说程序化交易的要求也不少 有意做期货都可以点击交流 有任何问题都可以随时咨询

期货程序化交易软件哪个比较好?

针对一些对期货程序化不太了解并且想了解的朋友,这里给大家做了如下总结,希望能协助更多的朋友,客观合理的知道和挑选程序化,为自个的财富创造更大的升值空间.一.程序化的释义是什么程序化通常分为两类模型,一类是趋势模型,一类是震荡模型,如果你要把两者结合起来就要看自个的本事了,我的主张是程序化需求不停的去完善,但千万不能寻求十全十美,以下所说模型都是趋势模型;程序化是工具,协助你积累财富的工具,却不是一种暴利的赚钱方法,程序化模型它也有好坏之分,程序化赚钱的条件是要有一个好的策略,即程序。程序赚钱的关键是坚持的执行,程序化赚钱的精华即是在决定最终运用模型之后,彻底的抛弃你对金融市场的全部了解和交易技术.就像武侠小说里说的,想练成最上层的功夫,就应当先废掉一切.二.程序化模型的挑选与区分假如有人告诉你他的程序化能在不长的时间内,让你的资金翻几番,那你要为他的言语或他的程序打个折扣,可是假如对方又能拿出不错的图形或十分漂亮的收盘成果放在你的面前,你又该怎么去相信?以下内容就可以帮助你怎么区分好坏程序化模型.1.测试时间:一个好的程序化策略必要经得起时间周期的检验,假如一个程序化,成果很好,周期却只有一两个月,不可信;2.资金量:许多人贴出来的漂亮跑单成果,使用的资金常常是80%或许其它百分比,但这些都是不合理的挑选,由于金融市场资金管理很重要,在行情好的时候,资金运用越高,收益越大,行情不好时,资金运用越高亏本越大,但咱们无法去判断接下来的行情会怎样,所以,时间测试的成果运用百分比的开仓方法是不合理,这也即是为何,有时分会呈现资金运用率为80%是,测试成果却是亏本的,并且运用率为40%时又是获利的.总而言之,资金运用时应当挑选固定的手数进行测试,不管他的行情怎么,永不加仓或减仓,来测验一个模型更为合理;3、测试方法:开盘价和收盘价测试均有其不合理性,趋势模型通常以趋势反转点为开仓信号,故较为精确的是:出现指令价位。测试结果的剖析:a.指令总数:也即是信号数,过高,说明震荡行情过滤不好,过低,说明危险大;怎么判别信号数合理呢?那就只有不相同的模型在相同的周期下的一个对比了.还有一个最简单的方法即是将指令总数/有用交易天数以日内短线为例,通常一个有用交易日的平均信号数在2-5之间(此数据仅供参考);b.赢利率:总赢利不必看,只看扣出最大赢利的成果,必需为正,并且测试周期越长赢利率应当越大,许多模型,测近期不错,测远期就不可,所以测试时应当尽量的去测能测到的最长周期.(当然由于行情关系也也许呈现,长时刻比短期赢利率低,但整体而言,周期越长赢利率越高,才是好的模型的测验成果)c.正确率:其它条件都彻底相同的情况下,正确率越高自然越好,但也不必为了看到一个高正确率的模型而心动,也不必由于你自个模型的正确率低而担心,通常的正确率能在45%上下,就不错了,由于程序化的本来含义即是赚大亏小,在震荡的时候正确率天然会低;d.最大亏本率:假如你是挑选的固定手数,比方10手进行测试,你的最大亏本率最大应当不能超过10%,当然,假如你挑选的测试手数多,最大亏本率也许有所提高.假如你挑选的80%的资金运用率,也许亏本会更大,当然也会有亏本的不大的测试结果,这通常和你的测试周期中的行情的必定关系,所以不值得过于依靠;e.空仓时间:以日短线为例,空仓时时不宜太高,太高的话,必然会错失大行情,当然,这一项不是最主要的,如果你空仓时时长,赢利也高,错失就错失吧,错失不是差错,没赚到也不存在亏本的危险;小结:测试结果剖析不能只看某一个数据,因为联系起来一同剖析:指令总数不能多也不能少,周期越长赢利率应当越高,正确率45%以上就能够承受,最大亏本不能过大,空仓时间能够自行掌握;假如一个模型做到了以上几点是不是就算一个好的模型了呢,基本上能够算了,但最主要的还需要结合信号图形(此点需求必定的程序化经历,并不一定看上去好的模型就是好,当然看上去好是条件,假如看上去都觉得一般了,那必定是不行)来剖析,此外,还要看到模型里是不是有将来函数,假如是日内短线,信号就一定不能不见,天天的跳空缺口需求技术性的回补等等其它疑问都是剖析一个模型好坏的理由,可是,一个好的模型是不怕任何测试与剖析的(汇新云软件系统开发协同平台)

期货程序化交易是什么意思? 可以手动实现吗?

程序化交易系统是指设计人员将交易策略的逻辑与参数在电脑程序运算后,并将交易策略系统化。通过既定程序或特定软件,自动生成或执行交易指令的交易行为。 程序化交易系统一般都是托管服务器自动运行。也有半自动方式,不托管服务器,本地运行程序化交易系统,一旦出现信号提示即进行人工判断与下单

期货程序化交易的BPK,SPK

CTP固然是期货程序化交易的一个好东西,但是直接使用其API在上面开发,对C++编程语言的要求还是很高的。最近很多朋友问我,像文华财经,交易开拓者,金字塔之类的又是属于什么软件,和CTP又是什么关系?看来还是有必要写一写,为占大多数的程序化交易入门的朋友解答些疑惑吧~ CTP,综合交易平台,类似于金仕达行情交易系统,是基于期货交易所行情交易系统搭建的一个平台,期货公司选择了某一个平台后,搭建自己的柜台系统(中国是不准许个人不通过柜台直接在交易所交易的),然后文华财经,交易开拓者,金字塔这些软件就属于外围软件,比如交易开拓者最开始就是基于金仕达的,现在又推出了CTP版本。 由于CTP是完全开放了API的,所以有较高的编程能力的人可以自己写自己的交易系统,直接在期货公司的柜台上跑;而编程能力不是那么强的人,就用这些更简单外围软件提供的一些“语言”,对自己的交易策略进行程序化编写。 下面说说效率的问题。毋庸置疑,直接基于CTP开发的程序效率一定更高于用这些外围软件开发出的程序。原因有三点: 1.由于外围软件将平台的API进行了一层封装,然后再提供“语言”给开发者,所以程序运行的时候要多一个层次,先调用封装层,再调用API,所以效率必定低于直接调用API的程序。 2.用这些外围软件写的程序类似于解释性语言,比如脚本语言,VB那些,他不是直接转换为机器可读的二进制代码,而是转换成解释器可读的中间语言,而基于CTP的API开发的程序是用C++这样的编译性语言,可以直接把程序编译成机器可读的二进制代码,因此效率更高。 3.有的外围软件产生的交易指令不是直接发向期货公司的柜台,而是通过对程序脚本的解释后,发由自己的交易服务器,统一处理后,再发向柜台,据我所知,交易开拓者就是这样,目的是为了从中收费。这样,等于多了一条网络路径,效率明显降低。当然,这样也很不安全。 但是,由于用这些外围软件上手的门槛较低,对于程序化交易的初学者来说是很好的入门工具,并且由于简单,开发者可以花更多的精力在策略的研发上。目前也有很多程序化爱好者在使用,所以,我还是多为大家分享一些相关的知识,希望和大家多多交流

期货软件TB系统源代码解读系列19-函数上穿、下跌

函数上穿CrossOver与下跌CrossUnder,其实是很方便的一对函数术语,调用也很简练。可怎么说呢,这两我一般不怎么喜欢用,不是因为什么不好,只是个人习惯而已。这两函数算法没什么好说的,看字面意思都明白了,具体用代码怎么表达呢,我们来看看这代码编写的,如下:

函数CrossOver代码:

Params

NumericSeries Price1(1); //声明数值序列参数Price1,初始值为1.//

NumericSeries Price2(1); //声明数值序列参数Price2,初始值为1.//

Vars

Bool Con1(False); //声明布尔型变量Con1,初始判断为假。//

Bool PreCon(False); //声明布尔型变量PreCon,初始判断为假。//

Numeric Counter(0); //声明数值变量Counter,初值为0.//

Begin

If(Price1 > Price2) //假如价格Price1 大于Price2.//

{

Counter = 1;//变量Counter值等于1.//

Con1 = Price1[1] == Price2[1]; // 前一价格Price1等于前一价格Price2,把这两价格赋值给布尔型变量Con1//

While (Con1 and Counter < CurrentBar)//这也是一个循环语句,当布尔型变量Con1为真,并且Counter值小于当前k线索引值。//

{

Counter = Counter + 1; //变量Counter = 前一个Counter值 +1//

Con1 = Price1[Counter] == Price2[Counter];//布尔型变量Con1值随着变量Counter值变化了,即Counter值月大,k线的价格往回倒腾数位越多。//

}

PreCon = Price1[Counter] < Price2[Counter];//当k线返回索引价格Price2大于价格Price1时,把数值赋值给布尔型变量PreCon。这些运算符的先后顺序,跟数学运算符差不多,一般都是先乘除后加减(* / + -),次判断大小(<>),最后才是赋值(=)//

Return PreCon;//把布尔型变量值PreCon返回给主函数。//

}Else//就是假如价格Price1小于或等于Price2时。//

{

Return False; //返回给主函数是一个错误值,也就是没有值反馈回去了。//

}

End


看着不难吧,也是一步步翻译下来,就是同一根k线上,依据不同算法当价格1大于价格2了,比如均线10与均线120,在同一根k线上,体现出来是不一样的吧,所以才有了这上穿和下跌的。

函数CrossUnder代码,解读其实是一样的,就是条件改一下,价格Price1小于Price2时,怎么处理,如下:

Params

NumericSeries Price1(1);

NumericSeries Price2(1);

Vars

Bool Con1(False);

Bool PreCon(False);

Numeric Counter(0);

Begin

If(Price1 < Price2)

{

Counter = 1;

Con1 = Price1[1] == Price2[1];

While (Con1 and Counter < CurrentBar)

{

Counter = Counter + 1;

Con1 = Price1[Counter] == Price2[Counter];

}

PreCon = Price1[Counter] > Price2[Counter];

Return PreCon;

}Else

{

Return False;

}

End

解读完这两函数,我们可以调用KD指标直接试着做一个简单的程序化,看用这两函数与不用这两函数,交易时可有差异的。第一个用这两函数的代码及结果,如下:

Params

Numeric Length(14);

Numeric SlowLength(3);

Numeric SmoothLength(3);

Vars

NumericSeries HighestValue;

NumericSeries LowestValue;

NumericSeries KValue;

Numeric SumHLValue;

Numeric SumCLValue;

NumericSeries DValue;

Bool condition1;

Bool condition2;

Begin

HighestValue = HighestFC(High, Length);

LowestValue = LowestFC(Low, Length);

SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength);

SumCLValue = SummationFC(Close - LowestValue,SlowLength);

If(SumHLValue <> 0)

{

KValue = SumCLValue/SumHLValue*100;

}Else

{

KValue = 0;

}

DValue = AverageFC(KValue,SmoothLength);


If(!CallAuctionFilter()) Return;

condition1 = CrossOver(KValue[1],DValue[1]);

condition2 = CrossUnder(KValue[1],DValue[1]);

If(MarketPosition <>1 And condition1)

{

Buy(1,Open);

}

If(MarketPosition <> -1 And condition2)

{

SellShort(1,Open);

}



End



第二个,不用那两函数的,代码及结果如下:

Params

Numeric Length(14);

Numeric SlowLength(3);

Numeric SmoothLength(3);

Vars

NumericSeries HighestValue;

NumericSeries LowestValue;

NumericSeries KValue;

Numeric SumHLValue;

Numeric SumCLValue;

NumericSeries DValue;


Begin

HighestValue = HighestFC(High, Length);

LowestValue = LowestFC(Low, Length);

SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength);

SumCLValue = SummationFC(Close - LowestValue,SlowLength);

If(SumHLValue <> 0)

{

KValue = SumCLValue/SumHLValue*100;

}Else

{

KValue = 0;

}

DValue = AverageFC(KValue,SmoothLength);


If(!CallAuctionFilter()) Return;


If(MarketPosition <>1 And KValue[1] > DValue[1])

{

Buy(1,Open);

}

If(MarketPosition <> -1 And KValue[1] < DValue[1])

{

SellShort(1,Open);

}



End



上下两图对比看到了吧,基本是没有差别的,这也是为什么我一般懒得用它们的原因。当然你们要是不相信可以直接试对比一下的,这两函数用的时候记得声明为布尔型的就可以。很简单吧,代码没有我们想像的那么难,自己做程序化的交易也不是很难的,算法(即交易买卖规则)才是灵魂。

求高手:c语言中extern声明变量(函数)和在头文件中声明(不加extern)相比,有什么区别嘛?

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。
ps. 直接查百度了, 你自己看加粗了;

从专业角度来看,程序化交易是否加大对市场起到的助涨和助跌作用?

用ATR(真实波幅)参考:
我拿每个人都能用的大智慧来举例,你也可以自己试试:
TR : MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));nATR : MA(TR,N);
取样范围:04年-15年
我是12年开始做程序化的,程序化比重过60%大概在2013年到2014年间吧,我们算分界线为2014年1月1号好了
下面一行就是ATR,参数为默认的14,现在看起来太乱,我们改为只显示均值,参数20,我个人喜欢20,其实选多少意思都差不多。



改完参数,隐去当日数据后,两个红圈分别是07年峰值时的20日波动率(185)和15年峰值时的20日波动率(273)

我们可以发现,有程序化参与的波动率在极端行情来临时的确要比没有程序化时要高很多,要知道2007年的行情跨度,是高于2015年的.


我们再看一下大区间的均值,2014年到现在差不多500个交易日,直接设置参数500.
图中两个红圈,左边值为32,右边值为78
啥意思呢
2014年前两年平均波动率32,后两年平均波动率78
当然了,因为2014年前两年没什么行情,所以不具备参考性

怎么办呢?
我们用一段数据,跟2014年-2016年走势差不多的,如下图

白框即为参考对象

大致为2005.10-2008.10 三年,大概720个K,
改参数720
红圈值为86,也就是说2005.10-2008.10的平均波动率为86

也就是说,大的平均波动率来讲,没有程序化参与的07年的那个行情,平均波动率86,而程序化参与的2015年的行情,平均波动率是78,两者相差不大。

可以得出什么结论了吗?

结论1:短线的特别极端的行情来临时,程序化的确有着推波助澜的作用。
结论2:程序化参与不参与都不会对指数中期和长期有什么影响。
总结:
结论3:程序化的参与,起到了行情的催化作用,程序化并不是极端行情的制造者,而是极端行情的帮凶。

以上结论适用于国内,国外由于程序化参与程度不同,市场规则和机制不同,所以不好类比。

另外,这只是简单的分析方法, 没有双盲法那么严谨,除了程序化之外的因素比如股指期货啦杠杆啦什么的这些肯定是有影响的。
但是,程序化本身带来的追涨杀跌效应肯定是不容忽视的,因为大家都知道,大部分程序化都是趋势跟随为主。

在扯一个相关的,2012,2013两年其实做股指程序化的很多很多,但每次大家讨论时总是一片悲观气氛,都说现在a股没波动性啦赚不到钱啦不如去国外一些新市场做啦等等,当时的程序化比重也不低啊,为啥当时就没人指责程序化呢?

所以说程序化背锅了,的确是背了点,但你要说程序化对于暴涨暴跌一点责任都没有,那也不可能。
相关阅读

猜您喜欢

更多与期货程序化 函数ref 没有被声明相关文章