例如: var bar:integer; for bar:=20 to barcount -1 do begin if not lastpositionacitve then begin if a then buyatclose(bar,''); if b then sellatclose(bar,''); end end; 当条件a成立时,建立多头头寸;当条件b成立时,建立空头头寸。但是按照上面我写的程序测试时,如果多头头寸已经建立,但还没有平仓的这段时间中,即使有符合空头头寸建立的信号,但系统却并不会在多头头寸没有平仓的情况下建立空头头寸。我猜想可能出错的地方在于if not lastpositionactive then 这个前提,在这个前提下,只有空仓的时候才会依据条件来建立多头或者空头头寸。请教高手,怎么样才可以在多头头寸已经建立的同时,再建立空头头寸?
结束头寸的时候我分为多头头寸和空头头寸 例如: if longposition(lastposition) then begin if b then sellatclose(bar,'') end; if shortposition(lastpostion) then begin if a then coveratclose(bar,'') end; 实际上空头建立的条件就是多头平仓的条件,反之也一样。当然其中还有一些侄孙位置和浮动制损。但是如果把 if not lastpositionactive then 去掉的话,后面这些都不能很好地执行。而且不管多头头寸还是空头头寸都不会只建立一张,只要符合条件的都会建立
你的意思是不是这样:如果触发一张多头的单,就要判断上一张单的多/空性.如果是多就保留,是空就平掉.反亦然~~! 我想这个可以解决:设一个参数,如果是下多单,就把这个参观数置为1,如果为空单就把这个参数置为-1.在建立新单的时候通过读取这个参数来判断上一张是多单还是空单,这样就可以决定平不平了~~! 不知道行不行
我的想法:如果已经建立一张多单,那么就会有相应的侄孙和移动侄孙,在没有碰到侄孙的前提下,直到空头信号出现才平仓。并建立空单。问题是在多单由于空头信号才出场的情况下,空头的信号条件又牵扯到前面的k线数据;在if not lastpositionactive 前提下,空单的信号只会在多单平仓后的bar开始扫描,不会从bar之前的开始扫描
例如: if 多头信号 then begin if b:=-1 then 平掉空单; buyAtStop( Bar,DH, '' ); ;{ 建立多单} b:=1; end; if 空头信号 then begin if b:=1 then 平掉多单; shortatstop(bar,DL,'') ;{ 建立空单} b:=-1; end; 看看行不行~~!
问题已经解决 p:lastpositon if positionlong(p) then beign if 空头条件 then begin sellatclose(bar,''); shortatstop(bar+1,价位,'') end end