Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Strategie 4 Bougies 4H

  • MCTRADER-108785

    A faire sur 3 Pairs en simultanées, avec des P.O. Gains positifs chaque jour.

    Tracer une ligne du plus haut du jour et du plus bas du jour sur les 4 premières bougies de la journée en TF4H
    Cela donne un couloir.
    Mettre une Stoch Slow en 4H TF.
    Trade en Break out les lignes extrêmes Hautes ou Basses.
    Suivre la tendance de la Stoch en 4 H, pour confirmer le Trend.
    Cible 40 a 70 pips de démarrage du Break-Out
    Possible de travailler en Pendig Order, 20 pips au dessus des lignes traces, avec un stop sur la ligne.
    Ferme Le P.O. au bout de 5H, si le trade est pas pris.




  • DayTrader

    PO = payoff ratio ?

    J'aime bien l'idée de la sto comme indic de tendance ! j'en suis partisan, et je le trouve que rarement des gens qui l'utilisent ainsi !
  • Oyapoke

    Après un rapide backtest, ça me semble TOP!
    Merci
    Oyapoke
  • roland

    Ouais ça à l'air pas mal, enfin ça à l'air cohérent surtout. Ca doit être programmable ce genre de stratégie, quand j'aurais du temps j'essayerai ça ;)
  • babs

    je pense que P.O. c'est Pending Order.
  • furynick

    Ça devrait être rapide à coder ça ... je m'y penche.
  • MCTRADER-108785

    Pardon pour P.O.
    Pending Order bien sur.

  • Lorka85

    bonjour
    merci de cette méthode simple mc trader, je te fait 100% confiance.
    quelques question quand même

    1 - Pk faire ça sur 3 pairs simultané ?
    2 - quel valeur mettre au stochastic lent ?
    3 - quoi mettre comme stop loss ?
    4 - quel gmt horraire ? celui du broker de 0h00 jusqu'a 16h00 (4 bougies 4h donc) ou en gmt+1 (heure française) ,

    Merci !
  • MCTRADER-108785

    1- 3 pairs, pour avoir des signaux, car pas obliger qu'en 4h cela se débloque si tu es seulement sur une pair??Mais tu peux le faire sur 6 pairs?? Un truc ....Juste pour toi, quand je pratique cette technique je le fais sur les 7 pairs GBP !!!!He oui, et cela tape fort. Mais ya un truc???
    2- Stoch, a toi de tester, ce n'est pas très important, seulement une direction, test plusieurs valeurs???
    3- En 4h, entre 30 et 50 pips pour moi, a voir.
    4- moi je suis en Asie, je travaille en GMT, plus simple.
  • Lorka85

    merci de ta réponse rapide, tu aime aider malgré ton niveau avancé, cela t'honore.
    d'accord donc en gmt, sois la prise en compte des bougies entre 23h00 et 14h00 pour la France (pas loin de l'ouverture de newyork)

    et tu le fait en pending order avec les 20 pips de marge des hight low de la zone ou tu met un trend alert et tu le passe en manuel le plus souvent ?
    et le fameux stop loss ? a l'équité 50 / 50 ? 25 /50 ?
  • furynick

    Pour avoir un aperçu rapide de ce que pourrait donner cette méthode, voici un petit script qui trace une ligne à 20 pips des high/low des 4 premières barres de la journée en H4. Les pending orders expirant au bout de 5h, idéalement la barre suivante doit avoir dépassé l'une de ces deux lignes. A vue de nez sur EURUSD il y a une position par mois.

    Code
    //+------------------------------------------------------------------+ //| 4h4lines.mq4 | //| Copyright © 2011, Nicolas Tuffier | //| http://www.furyweb.org/forex/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nicolas Tuffier" #property link "http://www.furyweb.org/forex/" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { if (Period() != PERIOD_H4) { MessageBox("This script must be run on H4 timeframe"); return(-1); } double high, low, pips=20*Point*MathPow(10, Digits % 2); ObjectsDeleteAll(0); //---- for (int b = Bars; b>=0; b--) { if (TimeHour(Time[b]) == 16) { high = High[iHighest(NULL, 0, MODE_HIGH, 4, b+1)] + pips; low = Low [iLowest (NULL, 0, MODE_LOW , 4, b+1)] - pips; ObjectCreate("LineH"+b, OBJ_TREND, 0, Time[b+4], high, Time[b+1], high); ObjectSet("LineH"+b, OBJPROP_RAY, false); ObjectSet("LineH"+b, OBJPROP_STYLE, STYLE_SOLID); ObjectSet("LineH"+b, OBJPROP_COLOR, Gold); ObjectCreate("LineL"+b, OBJ_TREND, 0, Time[b+4], low , Time[b+1], low ); ObjectSet("LineL"+b, OBJPROP_RAY, false); ObjectSet("LineL"+b, OBJPROP_STYLE, STYLE_SOLID); ObjectSet("LineL"+b, OBJPROP_COLOR, Gold); } } //---- return(0); } //+------------------------------------------------------------------+
  • babs

    Toujours là pour donner des petits morceaux de code ;)

    En ayant vu cette technique je me suis jeter sur MetaEditor et puis finalement je me suis dit que je le ferai ce soir ;) Mais c'est sans compter sur Furynick qui lâche du code plus vite que son ombre :oP

    Une question en passant, le TimeHour(Time[b]) c'est en GMT??
  • Lorka85

    pk ne pas prendre les 16 bougies en h1 pour s'adapter au gmt , car la dernière bougie h4 ne ferme pas forcement a 14h avec le gmt du broker. (souvent gmt+2)

    merci fury, un codeux furax :)
  • furynick

    Et non, le calcul de l'heure GMT n'est pas chose aisée sous MT4, la variable Time[] contient l'heure du broker.

    Pour calculer l'heure GMT j'avais pondu ce code il y a quelques temps :
    #import "kernel32.dll"
    int GetTimeZoneInformation(int& a0[]);
    #import

    int init() {
    int tzinfo = GetTimeZoneInformation(tzdata);
    int local2broker = 60.0 * MathRound((TimeLocal() - TimeCurrent()) / 60); // perhaps MathMod would be more efficient
    int local2gmt = 60 * tzdata[0] + 3600 * (1 - tzinfo % 2);
    int broker2gmt = local2broker + local2gmt;
    }
    int start() {
    int gmthour = Time[0] + broker2gmt;
    }
  • Oyapoke

    Furynick,
    Une seule position par mois?
    En faisant défiler un graphique, tu t'aperçois que ce breakout est bien plus fréquent.
    Est-ce que je fais erreur?
    Oyapoke


  • furynick

    Pour ceux que ça intéresse j'ai commencé un EA mais je ne prendrai pas le temps de le terminer, cette stratégie ne me semble pas assez profitable pour être codée, on a au maximum un seul trade par jour et par paire pour éventuellement 20 pips soit un grand maximum de 400/500 pips par mois et par paire si un trade se déclenche tous les jours (ce qui est impossible).

    Je n'ai fait aucun test et je n'ai pas intégré le stochastic. Je n'ai pas non plus débuggé, c'est du code jeté pour les amateurs avertis qui voudraient reprendre le flambeau. Normalement les pending orders sont passés et expirent automatiquement, les SL et TP sont paramétrables et échelonnables (par ex. 3 TP à 20 pips chacun avec breakeven).

    Code
    //+------------------------------------------------------------------+ //| 4h4.mq4 | //| Copyright © 2011, Nicolas Tuffier | //| http://www.furyweb.org/forex/ | //| Based on strategy found at | //| http://www.forexagone.com/forum/t/5915-strategie-4-bougies-4h.htm| //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nicolas Tuffier" #property link "http://www.furyweb.org/forex/" #import "stdlib.ex4" string ErrorDescription(int error_code); #import #include <stderror.mqh> #define NAME "4h4" #define VERSION "1.0" extern double fixedLotSize = 0.0; //* force fixed lot size, 0 to disable and use auto lot size extern double percentRisk = 0.1; extern int slippage = 2; //* allowed deviation of price for orders opening extern int barCount = 4; extern int hourStart = 4; extern int expireHour = 5; extern int pipsOpen = 20; extern int pipsTargetStep = 20; extern int targetCount = 3; extern bool breakeven = true; extern color buyColor = DodgerBlue; extern color sellColor = Crimson; int lastTime; string smbl; int prd; int magicNumber; // magic number of orders opened by this EA for automatic detection int precision; // decimal number of allowed lot size int savedVolume; // last volume value for new bar detection double lotSize; // size of 1 lot double stepSize; // size of minimal lots size double factor; // conversion factor between pips & points int minStop; double SLPoints; string sPeriod; // human readable period label double orderLotSize; double pipValue; double suggestedRisk; //+------------------------------------------------------------------+ //| reads or creates magic number for trades identification | //+------------------------------------------------------------------+ void readMagicNumber() { string fileName = NAME+".magic"; int hMagic = FileOpen(fileName, FILE_BIN|FILE_READ); if (hMagic < 0) { //---- initializing magic number MathSrand(TimeLocal()); magicNumber = MathRand(); hMagic = FileOpen(fileName, FILE_BIN|FILE_WRITE); FileWriteInteger(hMagic, magicNumber, SHORT_VALUE); msgLog("Magic number saved : " + magicNumber); } else { //---- loading existing magic number magicNumber = FileReadInteger(hMagic, SHORT_VALUE); msgLog("Magic number read : " + magicNumber); } FileClose(hMagic); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- if (Period() < 60) { Print("Error : this EA work only on H1 and next timeframes"); return(-1); } smbl = Symbol(); prd = Period(); switch (prd) { case 1: sPeriod="M1"; break; case 5: sPeriod="M5"; break; case 15: sPeriod="M15"; break; case 30: sPeriod="M30"; break; case 60: sPeriod="H1"; break; case 240: sPeriod="H4"; break; case 1440: sPeriod="D1"; break; case 10080: sPeriod="W1"; break; default: sPeriod="MN"; break; } factor=Point*MathPow(10, Digits % 2); SLPoints=pipsOpen * factor; Print("SLPoints=", SLPoints); lotSize = MarketInfo(Symbol(), MODE_LOTSIZE); stepSize = MarketInfo(Symbol(), MODE_LOTSTEP); minStop = MarketInfo(Symbol(), MODE_STOPLEVEL) * factor; for (precision = 0; precision < 3; precision++) if (MathFloor(stepSize * MathPow(10, precision)) > 0) break; ErrorDescription(0); readMagicNumber(); magicNumber += prd; savedVolume = Volume[0]; //---- return(0); } //+------------------------------------------------------------------+ //| normalize and convert double to string | //+------------------------------------------------------------------+ string d2s (double v, int p) { return (DoubleToStr(NormalizeDouble(v, p), p)); } //+------------------------------------------------------------------+ //| log messages to distinct files | //+------------------------------------------------------------------+ void msgLog(string msg) { Print(msg); // msg=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)+" "+msg+"\r\n"; // FileWriteString(logFile, msg, StringLen(msg)); } //+------------------------------------------------------------------+ //| get indicators status and compute signals | //+------------------------------------------------------------------+ void computeLotSize() { double pipStop = SLPoints / factor; double riskAmount = AccountFreeMargin() * percentRisk / 100; // pip value for 1 lot pipValue=MarketInfo(Symbol(), MODE_TICKVALUE)*MathPow(10, Digits % 2); suggestedRisk=percentRisk; if (fixedLotSize == 0) orderLotSize=NormalizeDouble(MathFloor(riskAmount / pipStop / pipValue / stepSize) * stepSize * targetCount, precision); else orderLotSize=fixedLotSize; if (orderLotSize < stepSize * targetCount) { suggestedRisk=stepSize * targetCount * MathCeil(pipStop * pipValue / MathPow(10, Digits % 2)); pipValue*=stepSize * targetCount; } else { orderLotSize -= MathMod(orderLotSize, stepSize * targetCount); pipValue*=orderLotSize; } } //+------------------------------------------------------------------+ //| detect new bar formed | //+------------------------------------------------------------------+ bool newBarFormed() { bool ret=Volume[0] < savedVolume; savedVolume = Volume[0]; return(ret); } //+------------------------------------------------------------------+ //| check trading hour | //+------------------------------------------------------------------+ bool hourReached() { return(TimeHour(TimeCurrent())== hourStart); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double high; //---- computeLotSize(); if (newBarFormed() && hourReached()) sendOrders(); manageOrders(); printComments(); //---- return(0); } //+------------------------------------------------------------------+ //| set pending orders considering last high/low | //+------------------------------------------------------------------+ void sendOrders() { double high = High[iHighest(smbl, prd, MODE_HIGH, WHOLE_ARRAY, barCount)]; double low = Low[iLowest (smbl, prd, MODE_LOW , WHOLE_ARRAY, barCount)]; OrderSend(smbl, OP_BUYSTOP, orderLotSize, high + SLPoints, slippage, high, high + SLPoints + (pipsTargetStep * targetCount * factor), orderLotSize+"|"+pipsTargetStep+"*"+targetCount+" "+sPeriod+" "+NAME+" "+VERSION, magicNumber, TimeCurrent() + expireHour * 3600, buyColor); OrderSend(smbl, OP_SELLSTOP, orderLotSize, low - SLPoints, slippage, low, low - SLPoints - (pipsTargetStep * targetCount * factor), orderLotSize+"|"+pipsTargetStep+"*"+targetCount+" "+sPeriod+" "+NAME+" "+VERSION, magicNumber, TimeCurrent() + expireHour * 3600, sellColor); } //+------------------------------------------------------------------+ //| manage opened orders | //+------------------------------------------------------------------+ void manageOrders() { int i, n, pos1, pos2, pos3, step, num, count, next, ticket, norders = OrdersTotal(); string orderPeriod; double openPrice, initialLots, lots, newStop; for (i = 0; i < norders; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == magicNumber && OrderSymbol() == smbl && (OrderType() == OP_BUY || OrderType() == OP_SELL)) { pos1 = StringFind(OrderComment(), "|"); pos2 = StringFind(OrderComment(), "*"); pos3 = StringFind(OrderComment(), " "); initialLots = StrToDouble(StringSubstr(OrderComment(), 0, pos1)); pos1++; num = StrToInteger(StringSubstr(OrderComment(), pos1, pos2 - pos1)); pos2++; step = StrToInteger(StringSubstr(OrderComment(), pos2, pos3 - pos2)); ticket = OrderTicket(); openPrice = OrderOpenPrice(); newStop = OrderStopLoss(); lots = OrderLots(); count = (initialLots - lots) / (initialLots / num); next = count + 1; if (OrderType() == OP_BUY) { if (Ask > openPrice + (next * step * factor)) { OrderClose(ticket, initialLots/num, Ask, slippage, buyColor); OrderModify(ticket, openPrice, openPrice + (count * step * factor), OrderTakeProfit(), 0); } } else { if (Bid < openPrice - (next * step * factor)) { OrderClose(ticket, initialLots/num, Bid, slippage, sellColor); OrderModify(ticket, openPrice, openPrice - (count * step * factor), OrderTakeProfit(), 0); } } } } } } //+------------------------------------------------------------------+ //| information printout | //+------------------------------------------------------------------+ void printComments() { } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+
  • furynick

    Au temps pour mois, une position par semaine, tu as raison.

    Depuis début février j'ai pu voir clairement 12 positions sur EURUSD en H4, il est cependant possible que d'autres positions s'ouvrent mais elles seraient perdantes (le cours touche le pending order et repars dans l'autre sens illico). J'ai l'impression que la plupart pourraient dépasser les 60 pips mais ce n'est qu'une impression. Ce qui ferait 720 pips sur EURUSD en 3 mois soit 240 pips par mois.

    A titre de comparaison, mon robot MaBol ultra simpliste, écrit en quelques minutes seulement a fait plus de 200 pips sur EURUSD donc pas envie de passer du temps à coder un EA aui ne serait pas plus performant.
  • Poupouille — en réponse à furynick dans son message #25399

    ]
    Bonjour furynick, pourrais-tu nous expliquer cette stratégie "MaBol" ?
    Merci d'avance, c'est toujours un plaisir de te lire.
    Modifié le 2012-12-30 14:38:02 par AliX
  • Poupouille — en réponse à MCTRADER-108785 dans son message #25273

    MCTRADER-108785, le 01/05/2011 dit :
    A faire sur 3 Pairs en simultanées, avec des P.O. Gains positifs chaque jour. Tracer une ligne du plus haut du jour et du plus bas du jour sur les 4 premières bougies de la journée en TF4H Cela donne un couloir. Mettre une Stoch Slow en 4H TF. Trade en Break out les lignes extrêmes Hautes ou Basses. Suivre la tendance de la Stoch en 4 H, pour confirmer le Trend. Cible 40 a 70 pips de démarrage du Break-Out Possible de travailler en Pendig Order, 20 pips au dessus des lignes traces, avec un stop sur la ligne. Ferme Le P.O. au bout de 5H, si le trade est pas pris.
    Merci pour ce partage.
    Pourquoi tracer le couloir sur les 16 premières heures de la journée ?
    Quand clôtures-tu tes trades si l'objectif n'est pas atteint ?
    Merci
  • TRADEUSE DEBUTANTE (invité) — en réponse à MCTRADER-108785 dans son message #25273

    je suis nouvelle dans le domaine du trading et j'avoue que je ne comprend rien de rien au terme que tu utilise pour expliquer ta strategie alors s'il te plait tu peut etre un peu plus clair et explicite en evitant les abreviations et mieux m'expliqué ta strategie. le trading est quelque chose qui me pationne alors s'il te plait j'attend ton explication.
    ton aide me sera tres precieuse
    cordialement
    rebecca
    tradeuse debutante