4801Participant
Junior
Bonsoir à tous
Afin d’ éviter 2 trades successifs de même sens, je ne trouve rien du style ” LASTTRADE IS LONG” ou ” LASTTRADE IS SHORT ” je plante sur :
Comment coder: Le dernier trade était long
Le dernier trade était short
Merci si vous avez une idée . Bon week-end
Un début de réponse :
https://www.prorealcode.com/topic/add-condition-referencing-last-trade-direction/
Il y aurait toutefois d’autres façons de procéder suivant les cas de figures, fait nous savoir si cette solution te convient, merci.
4801Participant
Junior
Merci Nicolas et Robertogozzi
J’ ai testé sans succès avec le code qui suit. Le code ne génère aucun trade.
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
indicator1 = WeightedAverage[20](close)
ONCE LastTradeDirection = 0
IF LongOnMarket THEN
LastTradeDirection = 1 //1 = dernier trade était LONG
ELSIF ShortOnMarket THEN
LastTradeDirection = 2 //2 = dernier trade était SHORT
ENDIF
// Conditions pour ouvrir une position acheteuse
// La moyenne 20 était baissière et devient haussière:
c1 = (indicator1[2] >= indicator1[1])
c2 = (indicator1 > indicator1[1])
IF c1 AND c2 and LastTradeDirection = 2 THEN
BUY 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
IF LONGONMARKET THEN
SELL AT (TRADEPRICE + 0.0050)LIMIT
ENDIF
// Conditions pour ouvrir une position short
// La moyenne 20 était haussière et devient baissière:
c3 = (indicator1[2] <= indicator1[1])
c4 = (indicator1 < indicator1[1])
IF c3 and c4 AND LastTradeDirection = 1 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position short:
IF SHORTONMARKET THEN
EXITSHORT AT (TRADEPRICE – 0.0050)LIMIT
ENDIF
Merci et bonne soirée à tous.
4801Participant
Junior
Bonjour Nicolas
J’ ai utilisé le symbole <> pour écrire à nouveau le code comme tu le demandes dans tes réponses.
J’ ai testé sans succès avec l’ utilisation du lien transmis. Le code ne génère aucun trade.
Je n’ ai rien trouvé pour coder: ” le dernier trade était long”
” le dernier trade était short”
Merci .
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
indicator1 = WeightedAverage[20](close)
ONCE LastTradeDirection = 0
IF LongOnMarket THEN
LastTradeDirection = 1 //1 = dernier trade était LONG
ELSIF ShortOnMarket THEN
LastTradeDirection = 2 //2 = dernier trade était SHORT
ENDIF
// Conditions pour ouvrir une position acheteuse
// La moyenne 20 était baissière et devient haussière:
c1 = (indicator1[2] >= indicator1[1])
c2 = (indicator1 > indicator1[1])
IF c1 AND c2 and LastTradeDirection = 2 THEN
BUY 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
IF LONGONMARKET THEN
SELL AT (TRADEPRICE + 0.0050)LIMIT
ENDIF
// Conditions pour ouvrir une position short
// La moyenne 20 était haussière et devient baissière:
c3 = (indicator1[2] <= indicator1[1])
c4 = (indicator1 < indicator1[1])
IF c3 and c4 AND LastTradeDirection = 1 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position short:
IF SHORTONMARKET THEN
EXITSHORT AT (TRADEPRICE – 0.0050)LIMIT
ENDIF
Tu enregistres correctement ici la notion du trade en cours entre tes lignes 6 et 10, tout est ok jusque là. Ensuite c’est ta gestion de la variable qui pose problème puisque tu testes si celle-ci est égal à 2 pour ouvrir un order d’achat ou si elle est égale à 1 pour ouvrir un nouvel ordre de vente. Hors cette variable vaut 0 tant qu’il n’y a pas eu d’ordre, donc rien ne s’ouvrira jamais.
Dans ce cas de figure, tu peux ajouter une condition en plus pour tester si ‘LastTradeDirection’ vaut OU BIEN 0, si oui alors tes lignes 17 et 29 seront lus par l’interpréteur de codes.
Exemple pour ta ligne 16:
IF c1 AND c2 and (LastTradeDirection = 2 OR LastTradeDirection=0) THEN
Attention aux parenthèses ! Je te laisse faire de même pour les conditions d’entrées en VAD.
4801Participant
Junior
Bonjour à tous et merci Nicolas, je m’ y met dès mon boulot fini.
4801Participant
Junior
Bonsoir tout le monde.
Le code corrigé fonctionne bien, c’ est OK (merci Nicolas)
Je croyais que cela serait sympa sur le Forex, mais les backtests en faisant varier un stop loss, la Moyenne mobile et l’ objectif gain donnent des résultats mauvais.
Merci prorealcode, de m’ éviter des trades d’ illusion. j’ ai testé seulement en daily.
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
indicator1 = WeightedAverage[m](close)
ONCE LastTradeDirection = 0
IF LongOnMarket THEN
LastTradeDirection = 1 //1 = dernier trade était LONG
ELSIF ShortOnMarket THEN
LastTradeDirection = 2 //2 = dernier trade était SHORT
ENDIF
// Conditions pour ouvrir une position acheteuse
// La moyenne 20 était baissière et devient haussière:
c1 = (indicator1[2] > indicator1[1])
c2 = (indicator1 > indicator1[1])
IF c1 AND c2 and (LastTradeDirection = 2 OR LastTradeDirection=0) THEN
BUY 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
IF LONGONMARKET THEN
SELL AT (TRADEPRICE + P)LIMIT
ENDIF
// Conditions pour ouvrir une position short
// La moyenne 20 était haussière et devient baissière:
c3 = (indicator1[2] <= indicator1[1])
c4 = (indicator1 < indicator1[1])
IF c3 and c4 AND (LastTradeDirection = 1 OR LastTradeDirection=0) THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position short:
IF SHORTONMARKET THEN
EXITSHORT AT (TRADEPRICE - P)LIMIT
ENDIF
SET STOP LOSS X