Achat/Vente suivant couleur indicateur

Viewing 14 posts - 1 through 14 (of 14 total)
  • Author
    Posts
  • #12228 quote
    Matriciel
    Participant
    Master

    Bonjour à tous,

    Est-ce possible de paramétrer un code afin de déclencher un achat ou une vente suivant la couleur d’un indicateur ? (par exemple : vert = achat et rouge = vente)

    Merci pour vos réponses.

    Bien à vous.

    #12236 quote
    Nicolas
    Keymaster
    Master

    Bonjour, oui si cette couleur correspond à une variable que l’on peut tester dans le code. Ou sinon, il faudrait la créer pour la rendre exploitable par une stratégie de trading automatique.

    De quel indicateur en particulier s’agit-il ?

    #12237 quote
    Matriciel
    Participant
    Master

    Cela tombe bien que ce soit toi qui me réponde Nicolas car il s’agit d’un indicateur que tu as développé en partie (DSS Bressert Scalper Improved).

    Tout d’abord, je voulais te remercier pour ton travail qui nous aide beaucoup.

    Voilà, j’aimerais déclencher un achat lorsque ton indicateur se situe sous le niveau 20 et qu’il soit en phase ascendante pendant 2 bougies (DSS dans le vert). La couleur verte matérialisant la hausse dans mon paramétrage.

    Merci beaucoup pour ton aide !

    #12238 quote
    Nicolas
    Keymaster
    Master

    OK, donc tu fais référence à cet indicateur : http://www.prorealcode.com/prorealtime-indicators/dss-bressert-scalper-improved/

    Je n’en suis pas l’auteur, je l’ai convertit depuis le code MT4.

    L’indicateur est-il appelé dans ta stratégie depuis une fonction CALL ? Si oui pourrais-tu me poster le code pour utiliser les mêmes définitions de variables, merci.

    #12260 quote
    Matriciel
    Participant
    Master

    Pour tout te dire, je débute dans le trading automatique car j’ai perdu pied dans le trading manuel ! Je ne maîtrise pas du tout la programmation sous PRT.

    J’ai remarqué que lorsque je lançais un programme qui comportait la mention “Positionsize” en Probacktest elle fonctionnait mais pas en réel, sauf si je met “1” à la place, pourquoi ? Voir exemple ci-dessous :

    IF Not SHORTONMARKET AND ShortCondition THEN
    SELLSHORT Positionsize CONTRACT AT MARKET
    ENDIF

    IF Not SHORTONMARKET AND ShortCondition THEN
    SELLSHORT 1 CONTRACT AT MARKET
    ENDIF

    Merci pour ta patience ! 🙂

    #12262 quote
    Nicolas
    Keymaster
    Master

    Bien, positionsize n’est pas une instruction du langage prorealtime.

    En réel le serveur du courtier refusera de lancer un trade de 0 volume et c’est ce que tu cherches à faire si tu ne définis pas sa valeur.

    Positionsize est un libéllé de variable, je pense que tu en herites dans ton code à cause d’un copier/coller.
    Tu pourras aussi bien faire :

    Chouxfleur=1

    BUY Chouxfleur CONTRACT AT MARKET

    Concernant le DSS, rappelle moi de m’en  occuper dans les prochains jours.

    #12331 quote
    Matriciel
    Participant
    Master

    Merci beaucoup Nicolas !

    Ok pour le DSS.

    #12334 quote
    Nicolas
    Keymaster
    Master

    Voilà comment faire pour tester ta condition acheteuse au sujet de l’indicateur DSS Bressert dont on a parlé plus haut:

    // appel de l'indicateur et définition des 3 variables qu'il retourne
    dss, lowlevel, highlevel = CALL "PRC_Bressert Scalper Improved"[8, 13, 2.6]
    
    // test des conditions pour un achat (sous le lowlevel et en phase ascendante pendant 2 bougies)
    buycondition = summation[2](dss<20 and dss>dss[1])=2
    
    // achat au marché si les conditions sont remplies 
    if not longonmarket and buycondition then 
     BUY 1 CONTRACT AT MARKET 
    endif
    

    J’ai commenté le code. Je n’ai pas testé, merci de me faire un retour. Bon Dimanche.

    #12349 quote
    Matriciel
    Participant
    Master

    Voilà ce que j’ai pu faire (c’est vraiment un code de débutant !) :

     

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    
    Defparam flatafter = 180000
    
    // Conditions pour ouvrir une position acheteuse
    // appel de l'indicateur et définition des 3 variables qu'il retourne
    dss, lowlevel, highlevel = CALL "DSS Bressert Scalper"
    
    // test des conditions pour un achat (sous le lowlevel et en phase ascendante pendant 2 bougies)
    buycondition = summation[2](dss<20 and dss>dss[1])=2
    buycondition = lowlevel[20]
    buycondition = highlevel[80]
    
    // achat au marché si les conditions sont remplies
    if not longonmarket and buycondition and time > 080000 and time < 174500 then
    BUY 1 CONTRACT AT MARKET
    endif
    
    // Conditions pour fermer une position acheteuse
    sellcondition = summation[2](dss>80 and dss<dss[1])=2
    sellcondition = lowlevel[20]
    sellcondition = highlevel[80]
    
    IF time > 080000 and time < 174500 THEN
    SELLSHORT AT MARKET
    ENDIF
    
    // test des conditions pour une vente (au-dessus du highevel et en phase descendante pendant 2 bougies)
    sellcondition = summation[2](dss>80 and dss<dss[1])=2
    sellcondition = lowlevel[20]
    sellcondition = highlevel[80]
    
    // vente au marché si les conditions sont remplies
    if not shortonmarket and sellcondition and time > 080000 and time < 174500 then
    SELLSHORT 1 CONTRACT AT MARKET
    endif
    
    // Conditions pour fermer une position en vente à découvert
    buycondition = summation[2](dss<20 and dss>dss[1])=2
    buycondition = lowlevel[20]
    buycondition = highlevel[80]
    
    IF time > 080000 and time < 174500 THEN
    BUY AT MARKET
    ENDIF

    Ca fonctionne mais les gains et les pertes s’équilibrent. Ce code prends beaucoup trop de positions à mon goût ! 🙂

    Merci encore de m’avoir aidé Nicolas.

    #12371 quote
    Nicolas
    Keymaster
    Master

    Merci pour le retour de ta stratégie.

    Il y a quelques énigmes pour moi dans ce que tu as écrit 🙂

    Pourquoi tous ces ‘buycondition’ et ‘sellcondition’ dupliqués en testant le lowlevel et le highlevel 20 et 80 périodes en arrière? Les lignes syntaxées que la ligne 11 suffisent déjà à tester la condition que tu voulais en début du topic.

    Ensuite, dés que tu achètes, tu vends immédiatement et inversement. Les trades n’ont pas le temps de “vivre” qu’ils sont déjà fermés 🙂

    Tu devrais commencer par supprimer les lignes de conditions inutiles (buycondition et sellcondition, lignes 12/13 par exemple) et les tests de conditions de sorties, tu verras beaucoup plus claire dans le backtest ensuite et tu pourras voir que les achats clôturent naturellement les ordres de vente et inversement.

    #12385 quote
    Matriciel
    Participant
    Master

    Bonjour Nicolas,
    Tu sais, même moi, je ne comprends pas tout ! 😀
    D’accord, je vais rectifier tout ça et je te dis.

    #12420 quote
    Matriciel
    Participant
    Master

    Voilà, mon code fonctionne très bien comme ça :

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    
    Defparam flatafter = 180000
    
    // Conditions pour ouvrir une position acheteuse
    // appel de l'indicateur et définition des 3 variables qu'il retourne
    dss, lowlevel, highlevel = CALL "DSS Bressert Scalper"
    
    // test des conditions pour un achat (sous le lowlevel et en phase ascendante pendant 2 bougies)
    buycondition = summation[2](dss<lowlevel[20] and dss>dss[1])=2
    
    // achat au marché si les conditions sont remplies
    if not longonmarket and buycondition and time > 080000 and time < 174500 then
    BUY 1 CONTRACT AT MARKET
    endif
    
    // Conditions pour fermer une position acheteuse
    sellcondition = summation[2](dss>highlevel[80] and dss<dss[1])=2
    
    IF not shortonmarket and sellcondition and time > 080000 and time < 174500 THEN
    SELLSHORT AT MARKET
    ENDIF
    
    // test des conditions pour une vente (au-dessus du highevel et en phase descendante pendant 2 bougies)
    sellcondition = summation[2](dss>highlevel[80] and dss<dss[1])=2
    
    // vente au marché si les conditions sont remplies
    if not shortonmarket and sellcondition and time > 080000 and time < 174500 then
    SELLSHORT 1 CONTRACT AT MARKET
    endif
    
    // Conditions pour fermer une position en vente à découvert
    buycondition = summation[2](dss<lowlevel[20] and dss>dss[1])=2
    
    IF not longonmarket and buycondition and time > 080000 and time < 174500 THEN
    BUY AT MARKET
    ENDIF
    

     

    Merci encore pour tes conseils Nicolas ! 🙂

    #12442 quote
    Nicolas
    Keymaster
    Master

    De rien.

    Si tu supprimes les lignes 25 à 38, tes résultats seront identiques. Car tes conditions de sorties sont les mêmes qui stimulent des entrées contraires et puisque un BUY ferme un SELLSHORT et vice-versa, ces lignes sont inutiles.

    #12443 quote
    Matriciel
    Participant
    Master

    OK.

    Par contre, mon code achète ou vends 2 lots par moment, pourquoi ?

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

Achat/Vente suivant couleur indicateur


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Matriciel @matriciel Participant
Summary

This topic contains 13 replies,
has 2 voices, and was last updated by Matriciel
9 years, 6 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 08/25/2016
Status: Active
Attachments: No files
Logo Logo
Loading...