头寸编程问题

Discussion in 'Wealth-Lab Developer' started by stockfeng, Jan 15, 2007.

  1. 例如:
    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 这个前提,在这个前提下,只有空仓的时候才会依据条件来建立多头或者空头头寸。请教高手,怎么样才可以在多头头寸已经建立的同时,再建立空头头寸?
     
  2. 把 if not lastpositionactive then 去掉不就行了吗~!
     
  3. 问题是把这个前提去掉的话,多头头寸或者空头头寸在平仓的条件成立时并不能平仓,导致最后的测试结果不正常,很多头寸都没有平掉
     
  4. 不会吧,我写的平仓条件也没用这个啊,应该是可以的。把你的平仓条件放上来看一下~!~!
     
  5. 结束头寸的时候我分为多头头寸和空头头寸
    例如:

    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 去掉的话,后面这些都不能很好地执行。而且不管多头头寸还是空头头寸都不会只建立一张,只要符合条件的都会建立
     
  6. 你的意思是不是这样:如果触发一张多头的单,就要判断上一张单的多/空性.如果是多就保留,是空就平掉.反亦然~~!

    我想这个可以解决:设一个参数,如果是下多单,就把这个参观数置为1,如果为空单就把这个参数置为-1.在建立新单的时候通过读取这个参数来判断上一张是多单还是空单,这样就可以决定平不平了~~!
      
    不知道行不行
     
  7. 这样就不用就不用lastpositionactive 这个东西了~!
     
  8. 我的想法:如果已经建立一张多单,那么就会有相应的侄孙和移动侄孙,在没有碰到侄孙的前提下,直到空头信号出现才平仓。并建立空单。问题是在多单由于空头信号才出场的情况下,空头的信号条件又牵扯到前面的k线数据;在if not lastpositionactive 前提下,空单的信号只会在多单平仓后的bar开始扫描,不会从bar之前的开始扫描
     
  9. 如何设置参数,能否给个例子。我初学,很多都不会
     
  10. 例如:
    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;
    看看行不行~~!
     
  11. :D
    试试这样可否。如行,请回馈一下。
     
  12. 问题已经解决
    p:lastpositon

    if positionlong(p) then
    beign
    if 空头条件 then
    begin
    sellatclose(bar,'');
    shortatstop(bar+1,价位,'')
    end
    end