ProRealTime
Pour partager sur le trading automatique, nos algorithmes, nos backtests

astuce/programme pour stop +1 sur IG

par Jayson » 13 Fév 2020 17:03

Bonjour à tous, suite a la discussion que j'ai eu avec Darkpoule dans la file sclaping du jour, j'ouvre le topic ici pour que l'on puisse échanger.

Pour faire simple en étant sur cfd à risque limité sur IG, on ne peut pas sécurisé les positions quand elles passent vert avec un stop +1 ou +2.

Par exemple si je suis à 3 points de gain latents, je ne peut pas sécurisé a +1 par exemple et laisser au trade une chance. Soit j'encaisse soit je laisse la chance au trade et je prend le risque de passer rouge.

je met un exemple de mouvent qui m'arrive de rater assez souvent.

@Dark si ta des tuyau je suis prenneur. Merci
Fichiers joints

Re: astuce/programme pour stop +1 sur IG

par DarkPoule » 14 Fév 2020 12:50

Salut!
Alors en standard que ça soit IG met une distance minimun aux stop.


Tu vois ici min:5 ....
Donc en théorie et pour utilisé les stop IG. tu dois avoir gagné 6 pts pour placé a SL+1...
5 pts pour SL a 0 etc.

Tu ne peux pas faire moins... genre 3 pts SL+1.

MAIS

Tu peux finter, avec les API.
Il faut simuler un stop. qui est en fait un stop au marché qui sera executé par un automate.

il y a deux type d'API chez IG.
Les API Stream (qui te permet d'avoir le flux du prix en direct)
Et API Rest,(qui te permet d'executer des ordres etc ... )

Exemple :
Prenon le Dow Jones, tu as une position a 29500 achat. il monte a 29503.
Ton automate sait qu'il doit sortir de la position si le prix reviens a 29501.
Des que ça reviens a 29501 ou moins il coupe ta position. comme si toi tu avais cliqué sur sortir.
Le soucis c'est que tu peux etre victime de la rapidité du marché. La machine va s'executer en 2 ou 3 ms. mais le temps que l'ordre passe... ça se trouve tu va te retrouvé a sortir a 29490... si il y a un gros mouvement.

Re: astuce/programme pour stop +1 sur IG

par Jayson » 14 Fév 2020 19:16

Salut Dark, je te remercie de ton retour.

A tu deja essayer de le faire ? Si oui il faut le faire en quel langage s'il te plait ? (Python ?)

Ca me branche pas mal tout de meme. Avec si possibilité de monter le stop au fur et a mesure que le marché monte cela serau top !

Re: astuce/programme pour stop +1 sur IG

par DarkPoule » 15 Fév 2020 07:44

Si c'est possible. En python oui.
Mais si tu n'a jamais codé ça va etre chaud.

De toute façon j'ai toujours songé a me le faire.
Tu connais python ou un autre langage ?

Re: astuce/programme pour stop +1 sur IG

par Jayson » 15 Fév 2020 12:24

Dac je vois.

Non je ne programme pas mais jai un amis qui programme. C'est son travail. C'est lui qui va me faire le code. Super baleze en codage.

Faut juste que je lui explique les les prise de position en trading etc et en une heure il aura compris ce que je veux faire.

Je prevois ca pour le mois de mars.

Re: astuce/programme pour stop +1 sur IG

par Jayson » 15 Fév 2020 12:39

Apres la solution la plus simple c'est de pouvoir mettre des stop +1 avec le streamdeck mais reste a voir si cette option sera possible avec le PRT V11 de IG.

Je vais appeller PRT lundi pour leur demander si cette fonctionnalité sera disponible avec IG.

Re: astuce/programme pour stop +1 sur IG

par DarkPoule » 15 Fév 2020 13:02

Du coup je me suis lancé, mais loin d'etre fini, ça donnera une bonne base a ton ami. en quel language il code ? python n'est pas réputé pour être rapide.

oui mais l'avantage du code c'est que tu bypass (d'une certaine façon) la limitation a +5pts... tu peux descendre a +3pts pour engager un faux SL.
Ensuite; le code sera beaucoup plus réactif que toi. le temps que je vois le prix a +5pts, il va se passer 500ms seconde entre ce que tu vois et le fait de cliquer.
Le code va s’exécuter en moins de 1ms.

trailing_auto.py
Spoiler:
Code: Tout sélectionner
#!/usr/bin/env python
#-*- coding:utf-8 -*-

from trading_ig_config import config
from trading_ig import IGService, IGStreamService
from trading_ig.lightstreamer import Subscription
from threading import Thread
import json
import numpy

class Account_connection(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.ig_service = IGService(username=config.username,
                                    password=config.password,
                                    api_key=config.api_key,
                                    acc_type=config.acc_type)
        print(config.username, config.acc_type)
        self.ig_service.create_session()
        self.protection = False

    def stream_init(self):
        ig_service = IGService(config.username, config.password, config.api_key, config.acc_type)
        self.ig_stream_service = IGStreamService(ig_service)
        ig_session = self.ig_stream_service.create_session()
        accounts = ig_session[u'accounts']
        for account in accounts:
            if account[u'accountId'] == config.acc_number:
                self.accountId = account[u'accountId']
            else:
                print('Account not found: {0}'.format(config.acc_number))
                self.accountId = None
        self.ig_stream_service.connect(self.accountId)


    def run(self):
        self.stream_init()
        account_str = 'TRADE:XXXX'
        self.subcription_trades = Subscription(
            mode="DISTINCT",
            items=[account_str],
            fields=["CONFIRMS"],)
        self.subcription_trades.addlistener(self.on_account_update)
        sub_key_trades = self.ig_stream_service.ls_client.subscribe(self.subcription_trades)
        input("{0:-^80}\n".format("HIT CR TO UNSUBSCRIBE AND DISCONNECT FROM LIGHTSTREAMER"))
        self.ig_stream_service.disconnect()

    def on_account_update(self, item_update):
        js = json.loads(item_update['values']['CONFIRMS'])
        level = js['level']
        print('level de la position:',level)
        self.protection = True

        self.activation_level = level + 3
        self.activation_level_state = False

        self.stop_level = level + 1
        self.real_stop_level = level + 6

class Epic_Connection(Thread):
    def __init__(self, epic):
        Thread.__init__(self)
        self.price = dict()
        self.epic = epic
        self.deal_ids = []
        self.ig_service = IGService(username=config.username,
                                    password=config.password,
                                    api_key=config.api_key,
                                    acc_type=config.acc_type)
        print(config.username, config.acc_type)
        self.ig_service.create_session()

    def stream_init(self):
        ig_service = IGService(config.username, config.password, config.api_key, config.acc_type)
        self.ig_stream_service = IGStreamService(ig_service)
        ig_session = self.ig_stream_service.create_session()
        accounts = ig_session[u'accounts']
        for account in accounts:
            if account[u'accountId'] == config.acc_number:
                self.accountId = account[u'accountId']
            else:
                print('Account not found: {0}'.format(config.acc_number))
                self.accountId = None
        self.ig_stream_service.connect(self.accountId)

    def run(self):
        self.stream_init()

        # epic_str = 'CLIENT_SENTIMENT:DE30' % self.epic
        self.subcription_trades = Subscription(
            mode="MERGE",
            items=["MARKET:" + self.epic],
            fields=["BID", "OFFER"],)
        self.subcription_trades.addlistener(self.on_epic_update)
        sub_key_trades = self.ig_stream_service.ls_client.subscribe(self.subcription_trades)
        input("{0:-^80}\n".format("HIT CR TO UNSUBSCRIBE AND DISCONNECT FROM LIGHTSTREAMER"))
        self.ig_stream_service.disconnect()


    def on_epic_update(self, item_update):
        print("epic update", item_update)
        price = float(item_update['values']['BID'])
        print('... prix:', price, ac.protection)
        import time

        for price in numpy.arange(13759.9, 13770, 0.5):
            time.sleep(1)
            if ac.protection:
                print
                print(price)
                print('... ... activation_level:', ac.activation_level,ac.activation_level_state)
                print('... ... stop_level:', ac.stop_level)
                print('... ... real_stop_level:', ac.real_stop_level)
                # POUR UN ACHAT
                if price >= ac.activation_level and ac.activation_level_state == False:
                    ac.activation_level_state = True
                elif price <= ac.stop_level and ac.activation_level_state == True:
                    print("on coupe")
                    ac.activation_level_state = False
                    ac.protection = False
                    # on sort de la position
                elif price >= ac.real_stop_level:
                    print("on met un vrai stop")
                    # verifier que le stop a bien ete mis
                    ac.activation_level_state = False
                    ac.protection = False
                # pp = self.ig_service.update_open_position(limit_level=None,
                #                                           stop_level=stop_level,
                #                                           trailing_stop=None,
                #                                           trailing_stop_distance=None,
                #                                           trailing_stop_increment=None,
                #                                           deal_id=deal, )

        # on verifie l'epic
        # on prend le prix d'entrée
        # on memorise le prix de condition d'activation su SL+1 ex: +3
        # lorsque ce prix est atteint on active la protection, si le prix reviens = ou inferieur a +1, on coupe.
        # lorsque le prix est superieur ou = a 6 on place un vrai sl+1


dax25 = "IX.D.DAX.IDF.IP"

ac = Account_connection()
ac.start()

dax_connection = Epic_Connection(dax25)
dax_connection.start()


trading_ig_config.py
Spoiler:
Code: Tout sélectionner
class config(object):
    username = "xxxx"
    password = "xxxx"
    api_key = "ccccccxcxcxcxcxc"
    acc_type = "DEMO" # LIVE / DEMO
    acc_number = "XXXX"


il faut disposer de ce dossier a coté du code (j'ai pas fait d'install dans l'environnement python)
https://github.com/ig-python/ig-markets-api-python-library/tree/master/trading_ig

et voici les requirements.
Spoiler:
Code: Tout sélectionner
beautifulsoup4==4.7.1
certifi==2018.11.29
chardet==3.0.4
decorator==4.4.1
idna==2.8
ipython==7.12.0
ipython-genutils==0.2.0
jedi==0.16.0
numpy==1.16.0
parso==0.6.1
pexpect==4.8.0
pickleshare==0.7.5
prompt-toolkit==3.0.3
ptyprocess==0.6.0
Pygments==2.5.2
requests==2.21.0
six==1.12.0
soupsieve==1.7.2
traitlets==4.3.3
urllib3==1.24.1
wcwidth==0.1.8

Re: astuce/programme pour stop +1 sur IG

par DarkPoule » 15 Fév 2020 13:12

et vous aurez besoin de ça surtout !
https://labs.ig.com/ !! toute la doc api IG.
https://labs.ig.com/sample-apps/streaming-companion/index.html
https://labs.ig.com/sample-apps/api-companion/index.html

Re: astuce/programme pour stop +1 sur IG

par Jayson » 15 Fév 2020 13:40

Je te remercie beaucoup Dark pour ces infos !
Cava nous avancer pas mal.

A part le Python quel autre langage me conseil tu ?

Je ny comprend pas grand chose aux lien que tu m'a envoyé maos j'irai voir avec lui par la suite.

Je te remercie des infos !

Re: astuce/programme pour stop +1 sur IG

par DarkPoule » 15 Fév 2020 14:03

je connais que le python. S'il connait c'est déja un bon début.

Articles en relation
Besoin d’aide pour un trailing stop
par Philippe56380 » 06 Mar 2019 20:21 (1 Réponses)
Stop lost en stop suiveur et objectif de sortie en plus?
par GOLDENBOY » 01 Aoû 2015 13:44 (6 Réponses)
Sondage => Stop sur une moyenne ?
par trappiste73 » 20 Nov 2018 21:33 (2 Réponses)
BOT : TP avec Time-Stop
par ticktack » 12 Juin 2019 14:21 (2 Réponses)
HELP Backtesting - stop loss pas exécuté !
par plataxis » 29 Juil 2016 16:49 (3 Réponses)
[Demo] Systeme Trailing Stop
par Edd » 24 Déc 2016 09:21 (14 Réponses)
MQL4 - MagicNumber et Trailing Stop
par Gacanga » 04 Avr 2017 11:39 (5 Réponses)
Stop garanti avec ProOrder
par Yenyen » 20 Oct 2019 21:11 (2 Réponses)
ProOrder => Possibilité de Stop à plage de déclenchement ?
par chad » 27 Fév 2018 19:47 (17 Réponses)
Trailing Stop et Magic Number dans un EA - Je n'y arrive pas
par Gacanga » 07 Avr 2017 10:51 (4 Réponses)

ProRealTime