Sortie de tposition refusée sur niveau

Forums ProRealTime forum Français Support ProOrder Sortie de tposition refusée sur niveau

Viewing 3 posts - 1 through 3 (of 3 total)
  • #211364

    Bonjour,

    dans ce programme de breakout classique, tout fonctionne sauf deux ocurences que j’ai souligné en gras

    Si quelqu’un peut y jeter un coup d’oeil, celà me soulagerais.

    Merci d’avance.

     

    //On établit trois niveaux à la hausse et à la baisse, on entre 4 lots puis on sort successivement 1 lot sur chaque niveau le dernier étant sorti sur stop suiveur

     

    //parameters :

    boxsize = 0.4

     

    //———————— Etablissement du renko —————-

     

    once topprice = high

    once bottomprice = low – boxsize*ticksize

     

    if(high > topprice + boxsize) THEN

    topprice = high

    bottomprice = topprice – boxsize

    ELSIF (low < bottomprice – boxsize) THEN

    bottomprice = low

    topprice = bottomprice + boxsize

    ELSE

    topprice = topprice

    bottomprice = bottomprice

    ENDIF

     

    //——————- Canal d’ouverture ——————-

    once pH=high

    once PB=low

    once CA1=high

    once CA2=high

    once CA3=high

    once CV1=low

    once CV2=low

    once CV3=low

    once stopSA=high

    once stopSV=low

     

    debut=143000

     

    if time<debut then

    cpt=0

    PH=topprice

    PB=bottomprice

    stopSA=topprice

    stopSV=bottomprice

    elsif topprice<>topprice[1] then

    cpt=cpt+1

    PH=max(PH,topprice)

    PB=min(PB,bottomprice)

    if high>CA3 then

    stopSA1=max(stopSA,high-2*ecart)

    endif

    if low<CV3 then

    stopSV1=min(stopSV,low+2*ecart)

    endif

    endif

     

    if cpt>5 then

    PH=PH[1]

    PB=PB[1]

    endif

    ecart=PH-PB

    CA1=PH+1*ecart

    CA2=PH+2*ecart

    CA3=pH+3*ecart

    CV1=PB-1*ecart

    CV2=PB-2*ecart

    CV3=PB-3*ecart

     

    //——————-Initialisation ———————

    if not onmarket then

    etat=0

    cptA=0

    cptV=0

    endif

     

    //————————- Achats ———————

    CondAchat1=not longonmarket and time>debut and time<=155000 and topprice[1]<=PH and topprice>PH

    CondAchat2=not longonmarket and time>155000 and time<173000 and cptA=0 and topprice[1]<=PH and topprice>PH

     

    if CondAchat1 or CondAchat2 then

    buy 4 shares at market

    cptA=cptA+1

    endif

    //———————— Etat0 (4 lots) —————————————-

    if longonmarket and etat=0 then

    if high[1]<= CA1 and high>=CA1 then

    sell 1 share at market

    etat=1

    elsif bottomprice[1]>=PB and bottomprice<PB then

    sell 4 shares at market

    etat=0

    endif

    endif

    //———————— Etat1(Reste 3 lots) —————————————-

    if longonmarket and etat=1 then

    if high[1]<=CA2 and high>=CA2 then

    sell 1 share at market

    etat=2

    elsif topprice[1]>=PH and topprice<PH then // il faut que topprice passe en dessous de PH pour pouvoir reprendre une position à l’achat

    sell 3 shares at market

    etat=0

    endif

    endif

    //———————— Etat2 (Reste 2 lots)—————————————-

    if longonmarket and etat=2 then

    if high[1]<=CA3 and high>=CA3 then

    sell 1 share at market

    etat=3

    elsif bottomprice[1]>=CA1 and bottomprice<CA1 then   // à cet endroit, il me sort les 2 lots restants

     //  au lieu d’un seul

    sell 1 share at market

    etat=4

    endif

    endif

    //———————— Etat3 (Reste 1 lot) —————————————-

    if longonmarket and etat=3 then        // ici, il ne veut pas prendre mon stop suiveur

    if low<stopSA1 then

    sell 1 share at market

    etat=0

    cptA=0

    cptV=0

    elsif time>214500 then

    sell 1 share at market

    etat=0

    cptA=0

    cptV=0

    endif

    endif

    //———————— Etat4 (Reste 1 lot)—————————————-

    if longonmarket and etat=4 then

    if high<max(tradeprice,high-2*ecart) then

    sell 1 share at market

    etat=0

    cptA=0

    cptV=0

    elsif time>214500 then

    sell 1 share at market

    etat=0

    cptA=0

    cptV=0

    endif

    endif

    #211417

    Sans savoir l’actif et le timeframe pour pouvoir reproduire le même problème, je pense à la lecture du code que là où tu as mis “à cet endroit, il me sort les 2 lots restants  au lieu d’un seul”, ce n’est probablement pas ce qu’il se passe.

    En effet prenons une bougie à travers laquelle passe CA2 et CA3 alors qu’on est en etat=1 : tu peux très bien avoir d’abord réduit la position de 1 et être passé à “etat=2”, puis juste après dans le code en étant dans la même bougie à la lecture du if suivant qui considère etat=2, avoir sorti un lot de plus. Le tout donne 2 lots sortis, sans que ce soit 2 au même endroit du code, avec tout ayant marché tel qu’écrit.

    Il faudrait sans doute inverser l’ordre de tes if, à savoir au lieu de tester etat de plus en plus grand tout en l’augmentant au risque de le retester ) sa plus grande valeur, tester etat de moins en moins grand et l’augmenter de sorte que sa nouvelle valeur n’est pas testée par les if suivants dans la même bougie. Donc traiter d’abord “//———————— Etat4…”, puis “//———————— Etat3…”, puis “//———————— Etat2”,  etc…

    #211447

    Bonjour et merci de ta réponse.

    Je suis en 5 secondes et en rangebar 0.4 (sur indice ou mieux sur matières premières). Avec ce réglage, il ne peut pas y avoir de bougies qui croisent deux niveaux en même temps.

    Dans ces conditions je ne vois pas l’intérêt de tester avec les états en ordres décroissants, ou je n’ai pas compris.

    Je vais tout de même essayer, mais je pense que pour une raison ou une autre, le programme comprend en franchissant CA1 après CA2( c’est-à-dire une correction)

    que l’histoire est finie et donc il clôture tout. Je cherche cette raison.

    Je vais retester à partir de demain car je n’ai pas fait attention si les deux lots ne sont pas partis sur des niveaux précédents.

    Je te tiens au courant et merci encore.

    Bonne soirée

     

     

Viewing 3 posts - 1 through 3 (of 3 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login