Stopper le système après atteinte du TP, puis le relancer sous conditions

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #111069 quote
    Taylor
    Participant
    Junior

    Bonjour,

    Je cherche actuellement en vain comment procéder pour faire stopper le système après l’atteinte du TP (et le réenclencher à seulement certaines conditions = changement de situation).

    Pour illustrer de manière simple :

    Admettons que j’ai 2 conditions cumulatives pour un achat

    1. au croisement à la hausse d’une MM 30 et 50
    2. au croisement à la hausse d’un indicateur type MACD par exemple

     

    Si le TP fixé est atteint suite à une première prise de position, je voudrais que le système ne reprenne plus position, sauf nouvelles conditions que je renseignerais (toujours pour l’exemple, un nouveau retournement à la hausse du MACD dans une tendance toujours haussière définie par les MM).

     

    Pour les conditions je vois comment faire normalement, mais ce qu’il me manque c’est le premier “IF (TP ATTEINT) THEN…” : comment traduire cette fonction en code ? Car dans la liste des fonctions je vois seulement la possibilité de définir un niveau de gains ou un TP mais pas de l’utiliser comme une variable atteinte ou non.

    // En cas de TP atteint, stopper le système avant prochain retournement
    IF [TP ATTEINT] THEN
    Autorisetrading=1
    Else
    Autorisetrading=0
    Endif

     

    Merci d’avance pour votre aide !

    #111071 quote
    Taylor
    Participant
    Junior

    A noter que je viens d’essayer en mettant

    c20= strategyprofit

     

    IF c20=XX (montant du TP) THEN…

     

    Et ça ne marche pas non plus.

     

    Idem pour

    myprofit=strategyprofit
    autorisetrading=1

    IF strategyprofit – myprofit >=5 then
    autorisetrading=0
    endif

    #111084 quote
    Nicolas
    Keymaster
    Master

    StrategyProfit retourne le profit cumulé (PnL) de la stratégie dans la monnaie du compte, donc tester une valeur de takeprofit avec ne marchera pas ou alors ce serait vraiment pas précis.

    Je te propose d’utiliser un test pour savoir si on été au marché dans la barre précédente (et qu’on y est plus dans la barre courante) et de vérifier si le profit était supérieur à 0. Si oui on enregistre le BARINDEX, par la suite on vérifiera si la condition du signal de trading a eu lieu après ou avant ce BARINDEX pour autoriser ou non le trading à nouveau.

    //enregistre le barindex du signal 
    if buycondition then
     signalbar=barindex
    endif 
    
    //vérifie le profit sur le dernier ordre 
    if ( (not onmarket and onmarket[1] and not onmarket[2]) or (tradeindex(1)=tradeindex(2) and tradeindex(1)=barindex[1] and tradeindex(1)>0) )  and lastcheck<>barindex then
     lastcheck = barindex
     wasonmarket=1
    else
     wasonmarket=0
    endif 
    if wasonmarket and positionperf(1)>0 then 
     profitbar=barindex[1]
    endif 
    
    //autorise le trading uniquement si le barindex du signal est supérieur à celui de la vérification de profit 
    if buycondition and signalbar>profitbar then 
     buy at market 
    endif 
    
    

    Non testé, à vérifier.

    #111088 quote
    Taylor
    Participant
    Junior

    EDIT : je n’avais pas vu votre réponse Nicolas avant de poster, je vérifie donc votre code et vous fais un retour rapidement !

     

    Dernier essai par moi-même avec ce que je viens de trouver, qui ne fonctionne pas non plus :

    // Ici je met un flag quand j'ai une tendance à la hausse ou à la baisse sur l'un de mes 2 indicateurs (croisement de MM et MACD)
    IF (indicator1 > indicator2) OR (indicator3 > indicator4) OR (indicator1 < indicator2) OR (indicator3 < indicator4) THEN
    flag=1
    ENDIF
    
    IF flag=1 THEN
    autorisetrading=1
    ENDIF
    
    // Conditions de reprise du trading
    IF autorisetrading=1 THEN
    c13 = (indicator3 CROSSES OVER indicator4) // Retournement à la hausse du MACD
    c14 = (indicator3 CROSSES UNDER indicator4) // Retournement à la baisse du MACD
    ENDIF
    
    // Conditions pour position acheteuse
    IF (c13 AND autorisetrading=1) THEN
    BUY 1 Contract at market
    ENDIF

    Je vous fais grâce du reste du code qui n’est que pour la clôture d’une position acheteuse ou la prise d’une position vendeuse.

     

    Dans la logique je pensais pourtant que ça aurait pu fonctionner. M’enfin j’ai encore beaucoup à apprendre lol.

    #111098 quote
    Taylor
    Participant
    Junior

    Je viens d’essayer le code donné qui ne fonctionne pas non plus.

     

    J’ai fait quelques adaptations en le mixant avec mon propre code, et je commence à m’en rapprocher.

    Ci-dessous vous trouverez la version uniquement pour une position acheteuse. Il n’y a bien qu’une seule prise de position par retournement à la hausse de l’indicateur MACD mais le code ne suit pas ma condition initiale que la MM10 soit strictement supérieure à la MM30…

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    
    // Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
    noEntryBeforeTime = 090000
    timeEnterBefore = time >= noEntryBeforeTime
    
    // Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
    noEntryAfterTime = 180000
    timeEnterAfter = time < noEntryAfterTime
    
    // Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // 
    IF condition=0 THEN
    firsttrade=0
    ENDIF
    
    // Conditions pour ouvrir une position acheteuse
    condition=0
    indicator1 = WeightedAverage[10](close)
    indicator2 = Average[30](close)
    c1 = (indicator1 CROSSES OVER indicator2)
    c2 = (indicator1 > indicator2)
    indicator3, indicator4, ignored = CALL "Mon indicateur MACD"
    c3 = (indicator3 CROSSES OVER indicator4)
    c4 = (indicator3 > indicator4)
    
    if c1 and c3 then
    condition=1
    elsif c1 and c4 then
    condition=1
    elsif c2 and c3 then
    condition=1
    elsif c2 and c4 then
    condition=1
    ENDIF
    
    IF condition=1 AND firsttrade=0 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
    BUY 1 CONTRACT AT MARKET
    firsttrade=1
    ENDIF
    
    // Conditions pour fermer une position acheteuse
    c5 = (indicator1 CROSSES UNDER indicator2)
    c6 = (indicator3 CROSSES UNDER indicator4)
    
    IF c5 OR c6 THEN
    SELL AT MARKET
    ENDIF
    
    // Stops et objectifs
    SET STOP pLOSS XX
    SET TARGET pPROFIT XX
    
    // Après atteinte du TP, reprise du système seulement si retournement et dans la tendance haussière
    If firsttrade=1 AND (indicator1 > indicator2) then
    flag= 1
    endif
    
    // Conditions de reprise du trading
    C13 = (indicator3 crosses over indicator4) // Retournement à la hausse du MACD
    
    // Conditions pour position acheteuse
    IF c13 AND flag=1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
    
    // Condition pour fermer une nouvelle position acheteuse (hors tp/sl)
    C5 = (indicator1 CROSSES UNDER indicator2)
    C6 = (indicator3 CROSSES UNDER indicator4)
    
    IF c5 OR c6 THEN
    SELL AT MARKET
    ENDIF

    Sans doute pas très propre comme code :D.

    #111127 quote
    fifi743
    Participant
    Master

    bonsoir,

    a essayer

    if longonmarket and close>positionprice + valeur then
    Autorisetrading=1
    Else
     Autorisetrading=0 
    Endif
    
    
    if shortonmarket close<positionprice-valeur then
    Autorisetrading=1 
    Else
     Autorisetrading=0 
    Endif 
    
    
    
    
    
    
    BIC thanked this post
Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.

Stopper le système après atteinte du TP, puis le relancer sous conditions


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Taylor @taylor Participant
Summary

This topic contains 5 replies,
has 3 voices, and was last updated by fifi743
6 years, 4 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 10/24/2019
Status: Active
Attachments: No files
Logo Logo
Loading...