ProOrder – Ordres annulés après 1 minute

Viewing 15 posts - 1 through 15 (of 20 total)
  • Author
    Posts
  • #141019 quote
    Khaled
    Participant
    Veteran

    Bonjour,

    J’ai légèrement adapté le code ci-dessous d’un post que j’ai trouvé sur prorealcode.com (Merci à l’auteur). J’essaye d’adapter les paramètres sur le DAX M15 en CFD (1€) et ça marche bien en Backtest (aucun message d’erreur, résultats généralement identiques après multiples tests). Par contre, une fois exécuté dans le Trading en réel, l’algorithme est régulièrement arrêté après 1 minute et je reçois les messages d’erreur ci-dessous.

    Quelqu’un peut-il m’aider à voir pourquoi ce système s’arrête après une minute?

    Merci

    Defparam cumulateorders = FALSE
    TIMEFRAME(15 minute)
    
    N = 1
    
    IF TIME = 080000 THEN
    H1 = HIGHEST[2](HIGH)
    B1 = LOWEST[2](LOW)
    AMP = H1 – B1
    LONG = 0
    SHORT = 0
    ENDIF
    
    IF TIME >= 080000 AND TIME <= 220000 THEN
    
    IF NOT LongOnMarket AND LONG=0 THEN
    BUY N CONTRACTS AT H1 STOP
    ENDIF
    
    IF NOT ShortOnMarket AND SHORT=0 THEN
    SELLSHORT N CONTRACTS AT B1 STOP
    ENDIF
    
    ENDIF
    
    IF LongOnMarket THEN
    LONG = 1
    ENDIF
    
    IF ShortOnMarket THEN
    SHORT = 1
    ENDIF
    20200806_DAX_error-système-arrêté-1.png 20200806_DAX_error-système-arrêté-1.png 20200806_DAX_error-système-arrêté-2.png 20200806_DAX_error-système-arrêté-2.png 20200806_DAX_error-système-arrêté-3.png 20200806_DAX_error-système-arrêté-3.png
    #141033 quote
    Nicolas
    Keymaster
    Master

    Avec un compte à risque limité,  il n’est pas possible d’être long et short à la fois sur le même instrument, hors c’est ce que tente de faire le robot dès son lancement. Suite à une répétition de rejets d’ordres la stratégie s’arrête automatiquement,  c’est une sécurité de la plateforme.

    #141034 quote
    robertogozzi
    Moderator
    Master

    >> Pour la clarté des messages sur les forums de ProRealCode, merci d’utiliser le bouton “insert PRT code” pour séparer la partie texte de la partie code, merci ! <<

    #141042 quote
    Khaled
    Participant
    Veteran

    Merci Roberto. Y a t il une instruction code a ajouter pour demander au Robot de ne pas envoyer un ordre dans le sens opposé s’il y a déjà un ordre en cours ou une position position ouverte? Ensuite, le module AutoTrading ne me permet pas de lancer des ordres avec un nombre de Contrats qui n’est pas entier c’est à dire avec décimales (exemple 0.5 ou 1.25), alors ça marche sur le Backtest. Y a t il une façon de faire des fractions de Contrats?

    Merci

    #141062 quote
    Khaled
    Participant
    Veteran

    Merci Nicols et Roberto, petite question, pourquoi ce problème d’ordres contradictoires ne ressort pas dans les Backtests? y a t il une ligne de code à ajouter pour que cela n’arrive pas en Trading réel? merci

    #141077 quote
    Nicolas
    Keymaster
    Master

    Je n’ai pas de compte à risque limité, mais tu pourrais essayer comme ceci : cette version du code ne tentera pas de poser un ordre STOP si aucun ordre n’est au marché, puisque je pense que c’est le but à la base de cette stratégie de breakout de l’Open.

    Defparam cumulateorders = FALSE
    TIMEFRAME(15 minute)
    
    N = 1
    
    IF TIME = 080000 THEN
    H1 = HIGHEST[2](HIGH)
    B1 = LOWEST[2](LOW)
    AMP = H1 – B1
    LONG = 0
    SHORT = 0
    ENDIF
    
    IF TIME >= 080000 AND TIME <= 220000 THEN
    
    if not onmarket then 
     IF LONG=0 THEN
      BUY N CONTRACTS AT H1 STOP
     ENDIF
    
     IF SHORT=0 THEN
      SELLSHORT N CONTRACTS AT B1 STOP
     ENDIF
    endif
    
    ENDIF
    
    IF LongOnMarket THEN
    LONG = 1
    ENDIF
    
    IF ShortOnMarket THEN
    SHORT = 1
    ENDIF
    #141103 quote
    Khaled
    Participant
    Veteran

    Merci mille fois Nicolas, dernière question, pourquoi ProOrder AutoTrading n’accepte que des nombres entiers pour un ordre. Quand je lance le programme et je saisis 0.5 ou 1.25 (point ou virgule pareil), le système ne l’accepte pas.

    20200806_DAX_error-contrat-size-1.png 20200806_DAX_error-contrat-size-1.png
    #141119 quote
    Nicolas
    Keymaster
    Master

    Parce qu’on ne peut pas tout simplement.  Il ne doit pas être possible de trader des demi contrats sur cet instrument.

    #141124 quote
    robertogozzi
    Moderator
    Master

    Vous indiquez également 1, voire 99. Ce qui compte, c'est le plus bas des deux, donc si ProOrder accepte 0,5, pas plus de 0,5 lot sera acheté.

    #141173 quote
    Khaled
    Participant
    Veteran

    Merci infiniment Nicolas and Roberto!

    #141471 quote
    Khaled
    Participant
    Veteran

    Bonjour Nicolas, Roberto,

    J’ai un petit soucis de cohérence entre backtest et trading réel. Peut-être que vous pourriez m’aider. Je prends l’exemple de la journée du 11/08/2020, ci-joint copies d’écran de la liste des ordres en backtest et copie d’écran des vraies ordres réels. Sur le backtest, on peut voir pour la journée du 11/08: 4 transactions qui ont une somme des résultats positives (gain). Sur le réel, on peut voir qu’il y a eu 10 transactions qui aboutissent à une perte.

    A votre avis, d’où vient cette écart dans les signaux et de résultats? comment la corriger?

    Merci de votre aide.

    Defparam cumulateorders = FALSE
    TIMEFRAME(15 minute)
    N = 1
    IF TIME = 080000 THEN
    H1 = HIGHEST[2](HIGH)
    B1 = LOWEST[2](LOW)
    AMP = H1 - B1
    LONG = 0
    SHORT = 0
    ENDIF
    
    IF CurrentDayOfWeek > 0 AND CurrentDayOfWeek < 6 THEN
    IF TIME >= 080000 AND TIME <= 220000 THEN
    
    IF NOT ONMARKET THEN
    IF LONG=0 THEN
    BUY N CONTRACTS AT H1 STOP
    //SET STOP $LOSS 50*N
    SET STOP %LOSS 0.65
    //SET STOP pLOSS (AMP*.65)
    SET TARGET pprofit (AMP*.85)
    ENDIF
    ENDIF
    
    IF NOT ONMARKET THEN
    IF SHORT=0 THEN
    SELLSHORT N CONTRACTS AT B1 STOP
    SET STOP $LOSS 20*N
    //SET STOP pLOSS (AMP*.6)
    SET TARGET pprofit (AMP*1)
    //SET TARGET %PROFIT 1
    ENDIF
    ENDIF
    ENDIF
    ENDIF
     
    IF LongOnMarket THEN
    LONG = 1
    ENDIF
     
    IF ShortOnMarket THEN
    SHORT = 1
    ENDIF
    20200812_Transactions-history-1.png 20200812_Transactions-history-1.png 20200812_Transactions-history-2.png 20200812_Transactions-history-2.png 20200812_Backtest-Orders-log.png 20200812_Backtest-Orders-log.png 20200812_Backtest-Summary-10kUT.png 20200812_Backtest-Summary-10kUT.png
    #141479 quote
    Nicolas
    Keymaster
    Master

    Pour commencer, l’instruction TIMEFRAME n’est pas utile dans le code si tu lances la stratégie en 15 minutes.

    Les Backtests sont ils fait en mode tick par tick et as-tu ajouter le spread ?

    L’écart au STOP n’est pas testé dans le backtest, peut être que les ordres sont ouverts plus loin pour respecter cette imposition du courtier ?

    Il faut commencer par vérifier les niveaux que tu calcules en H1 et B1 et les comparer aux valeurs d’entrées de tes ordres. Si il y a un gros décalage, alors surement que cela te paraîtra plus clair.

    #141514 quote
    Khaled
    Participant
    Veteran

    Bonjour Nicolas, merci pour ta disponibilité.

    Oui, les backtest sont faits en mode Tick par Tick.

    Je suis chez IG CFD (risque limité). Le Stop minimum du Courtier est de 10 pts (soit 10€). Le Stop minimum dans mon système est de 20 pts. Donc, je respecte cette condition.

    Pour le Spread, j’atteins ici un peu mon seuil d’incompétence. Je vais prendre un exemple: DAX Contrat Cash (1€) Achat 13.030 et Vente 13.028, donc Spread=2. pour un contract mon exposition est de 1303€.

    Dans mon Algo, dois-je spécifier Spread de 2 ou (2*10)=20?

    Dois-je ajouter le Spread uniquement pour le Backtest ou l’ajouter aussi pour le Trading en réel?

    Merci encore.

    #141524 quote
    Nicolas
    Keymaster
    Master

    Par défaut il n’y a pas de spread dans les backtests, il faut le renseigner dans la case dédiée. Pour savoir la taille du spread sur le DAX chez IG, il faut regarder sur leur site web.

    Il n’y a pas de stop minimum dans ton code, c’est en fait la distance à l’ordre conditionnel que le courtier impose. Soit il faut que les seuils de prix H1 et B1 calculés dans ton programme soit à cette distance minimum vis à vis du prix actuel pour que l’ordre soit posé à cet endroit précis, sinon il sera reculé. Dans les backtests cela n’est pas simulé puisque propre au courtier.

    #141535 quote
    Khaled
    Participant
    Veteran

    Nicolas, je ne sais pas comment te remercier. C’est génial que puisse partager ton savoir et y consacrer du temps pour partager avec les novices comme moi.

    Y-a-t-il un moyen de dire en langage PRT d’annuler un ordre qui n’a pas été exécuté après x minutes?

    Merci infiniment.

    Khaled

Viewing 15 posts - 1 through 15 (of 20 total)
  • You must be logged in to reply to this topic.

ProOrder – Ordres annulés après 1 minute


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Khaled @khaled Participant
Summary

This topic contains 19 replies,
has 3 voices, and was last updated by Khaled
5 years, 7 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 08/06/2020
Status: Active
Attachments: 9 files
Logo Logo
Loading...