Daily strategy for multipairs EA for these 5 pairs : EURUSD / CHFJPY / EURJPY / USDCHF / XAUUSD
It need these indicators :
- MA5 EMA Close
- MA25 EMA Close
- MACD 9,26,9 Close
- Stochastic 10;3;3 Close/Close
- Fractal and S/R of SR_SupportResistance_v04b (found here in this forum)
It take trade with no SL/TP but control Virtual SL/TP (see next post). Fix lot 0.10 for 2500 UD$ balance minimum if 1:500 leverage
For fractal, i'm using this code in delphi to store last Fast Fractal Up and Down and last Slow Fractal Up and Down
Code: Select all
Fractal1:=false;
Fractal2:=false;
Fractal3:=false;
Fractal4:=false;
for p := 1 to 120 do
begin
FractalFastDn := RoundTo( GetIndicatorValue(FRACTAL_H4[i],p,0), -Digits);
FractalFastUp := RoundTo( GetIndicatorValue(FRACTAL_H4[i],p,1), -Digits);
FractalSlowDn := RoundTo( GetIndicatorValue(FRACTAL_H4[i],p,2), -Digits);
FractalSlowUp := RoundTo( GetIndicatorValue(FRACTAL_H4[i],p,3), -Digits);
DateFractal := iTime(PaireDevise[i],PERIOD_D1,p);
if DateFractal > TimeCurrent then pause;
//Lprint(PaireDevise[i]+' -> Date Courante = '+DateTimeToStr(TimeCurrent)+' : Indice = '+IntToStr(p)+' Fractal date = '+DateTimeToStr(DateFractal)) ;
if (FractalSlowDn > 0) and (FractalSlowDn <> PaireFractalValueH4[i,1]) and (DateFractal > PaireFractalDateH4[i,1]) then
begin
PaireFractalValueH4[i,1] := FractalSlowDn ;
PaireFractalDateH4[i,1] := DateFractal ;
Fractal1:=true;
end;
if (FractalSlowUp > 0) and (FractalSlowUp <> PaireFractalValueH4[i,2]) and (DateFractal > PaireFractalDateH4[i,2]) then
begin
PaireFractalValueH4[i,2] := FractalSlowUp ;
PaireFractalDateH4[i,2] := DateFractal ;
Fractal2:=true;
end;
if (FractalFastDn > 0) and (FractalFastDn <> PaireFractalValueH4[i,3]) and (DateFractal > PaireFractalDateH4[i,3]) then
begin
PaireFractalValueH4[i,3] := FractalFastDn ;
PaireFractalDateH4[i,3] := DateFractal ;
Fractal3:=true;
end;
if (FractalFastUp > 0) and (FractalFastUp <> PaireFractalValueH4[i,4]) and (DateFractal > PaireFractalDateH4[i,4]) then
begin
PaireFractalValueH4[i,4] := FractalFastUp ;
PaireFractalDateH4[i,4] := DateFractal ;
Fractal4:=true;
end;
if (Fractal1=true) and (Fractal2=true) and (Fractal3=true) and (Fractal4=true) then break;
end;
- Detection for BUY signal if :
Code: Select all
//Buy
NbTradeBuy := IsThisDeviseWithoutSLTradable(PaireDevise[kk],0,0);
NbTradeSell := IsThisDeviseTradable(PaireDevise[kk],1,0);
if ( NbTradeBuy < MACD_NbTradeMax[kk]) and (NbTradeSell = 0) and
( PaireMACD_D1Main[kk,1] > PaireMACD_D1Main[kk,2]) and ( PaireMACD_D1Main[kk,2] > PaireMACD_D1Main[kk,3]) and
( _STOD1SLOW[kk,1] <= MACD_StochLevelToTrade[kk]) and ( _STOD1FAST[kk,1] > _STOD1SLOW[kk,1]) and ( _STOD1FAST[kk,1] > _STOD1FAST[kk,2]) and
( PaireMA5[kk,1] > PaireMA5[kk,2]) and ( PaireMA5[kk,2] > PaireMA5[kk,3]) and ( PaireMA25[kk,2] - PaireMA25[kk,1] < MACD_DeltaPipsMA25[kk]*Point ) and
((MonNbHour > MACD_HOURDELAY[kk] ) or (MonNbHour=9999)) and ((MonNbHourHistoBUY > MACD_HOURDELAY2[kk] ) or (MonNbHourHistoBUY=9999)) then
begin
- Nb SELL Trade = 0
- 3 last Daily MACD MAIN are UP
- Daily Stoch Slow < (param for each pair) (default 70)
- Daily STOCH Fast bar 1 > Stoch Fast bar 2
- MA5 is Up -> MA5 1 > MA5 2 and MA5 2 > MA5 3
- MA25 is Up or Down Less than "delta pips mini" (param for each pair) between MA25 1 and MA25 2 for UP direction
- Delay between 2 live trades > (param for each pair) (default 24H)
- Delay between Now and LastHisto trade > (param for each pair) (default 4H)
Add control Nb pips between last trade like this
Code: Select all
DistanceLastPrice := true;
DernierPrix := RenvoieLastOpenPrice(PaireDevise[kk],0);
if (DernierPrix > 0) then
begin
if MonBid > DernierPrix then
begin
if (MonBid - DernierPrix < MACD_DistanceInterTrade[kk]*Point) then DistanceLastPrice := false;
end
else
begin
if (DernierPrix - MonBid < MACD_DistanceInterTrade[kk]*Point) then DistanceLastPrice := false;
end;
end;
for FT delphi :
Code: Select all
DistanceSR := true;
for k:=0 to 50 do
begin
MonObjet := 'SSSR#'+IntTostr(k);
if ObjectExists(MonObjet) then
begin
MonTypeZone := ObjectGet(MonObjet,OBJPROP_STYLE);
MonNbHitZone := ObjectGet(MonObjet,OBJPROP_WIDTH);
if MonNbHitZone >=4 then
begin
MonPrixHaut := RoundTo(ObjectGet(MonObjet, OBJPROP_PRICE1),-digits);
MonPrixBas := RoundTo(ObjectGet(MonObjet, OBJPROP_PRICE2),-digits);
// Prix trop proche S/R ou dans S/R
if ((MonBid <= MonPrixBas) and (MonPrixBas - MonBid < (250 * MonPoint) )) or
((MonBid >= MonPrixBas) and (MonBid <= MonPrixHaut)) or (MonPrixHaut * MonPrixBas =0) then
begin
DistanceSR := false;
break;
end;
end;
end
else break;
end;
Code: Select all
SI Table_Compte.GestionSR = Vrai ALORS
DistanceSR = Faux
SRDétecté = Faux
ValeurGVProcheHi = 999999
ValeurGVProcheLo = 999999
SI Empty4.GlobalVariableCheck("SSSR_Count_"+MaDevise+"240")=True ALORS
NbSR = Empty4.GlobalVariableGet("SSSR_Count_"+MaDevise+"240")
POUR BoucleSR = 1 _A_ NbSR-1
SI Empty4.GlobalVariableCheck("SSSR_LO_"+MaDevise+"240"+BoucleSR)=True ET Empty4.GlobalVariableCheck("SSSR_HI_"+MaDevise+"240"+BoucleSR)=True ALORS
ValeurGVLo = Empty4.GlobalVariableGet("SSSR_LO_"+MaDevise+"240"+BoucleSR)
ValeurGVHi = Empty4.GlobalVariableGet("SSSR_HI_"+MaDevise+"240"+BoucleSR)
SI ValeurGVHi > MonBid OU ValeurGVLo > MonBid ALORS
SRDétecté = Vrai
ForceSR = 9
SI Empty4.GlobalVariableCheck("SSSR_STRENGTH_"+MaDevise+"240"+BoucleSR)=True ALORS ForceSR = Empty4.GlobalVariableGet("SSSR_STRENGTH_"+MaDevise+"240"+BoucleSR)+1
// valide niveau SR si inférieur au minimum demandé pour la devise ou distance OK
SI ((ValeurGVHi - MonBid) > MonDeltaPipsSR * MonPoint ET (ValeurGVLo - MonBid) > MonDeltaPipsSR * MonPoint) OU ForceSR <= W_Devise_Libellé.MACD_NiveauMiniSRAccordTrade ALORS
DistanceSR = Vrai
SI ValeurGVHi < ValeurGVProcheHi ET ValeurGVHi > MonBid ALORS ValeurGVProcheHi = ValeurGVHi
SI ValeurGVLo < ValeurGVProcheLo ET ValeurGVHi > MonBid ALORS ValeurGVProcheLo = ValeurGVLo
SINON
EcritMessage = Vrai
MaligneTexte = "BUY sur cross MACD refusée car Résistance "+ListeForceSR[ForceSR]+" trop proche à Lo/Hi "+NumériqueVersChaîne(ValeurGVLo,MonFormat)+"/"+NumériqueVersChaîne(ValeurGVHi,MonFormat)
SousChaîne = ExtraitChaîne(SAI_JOURNAL, rangPremier, RC)
TANTQUE SousChaîne <> EOT
SI ChaîneOccurrence(SousChaîne , MaligneTexte) > 0 ALORS
EcritMessage = Faux
SORTIR
SINON
EcritMessage = Vrai
FIN
SousChaîne = ExtraitChaîne(SAI_JOURNAL, rangSuivant, RC)
FIN
SI EcritMessage = Vrai ALORS MonMessageLive(MaDevise,MonPortMT4,MaligneTexte)
DistanceSR = Faux
SORTIR
FIN
FIN
FIN
FIN
FIN
SI DistanceSR = Vrai ALORS MonMessageLive(MaDevise,MonPortMT4,"BUY sur cross MACD avec Résistance "+ListeForceSR[ForceSR]+" proche à Lo/hi "+NumériqueVersChaîne(ValeurGVProcheLo,MonFormat)+"/"+NumériqueVersChaîne(ValeurGVProcheHi,MonFormat),Vrai)
FIN
Code: Select all
// si date fractal Slow DN est plus récente que Slow UP -> sens fractal = hausse sinon baisse
if UseFractalSlowToOpenTrade then
begin
if (PaireFractalDateH4[kk,1]>0) and (PaireFractalDateH4[kk,2]>0) and (PaireFractalDateH4[kk,1] < PaireFractalDateH4[kk,2]) then
begin
DistanceSr := false;
Lprint(PaireDevise[kk]+' BUY refusé par UseFractalSlowToOpenTrade car -> Slow Fractal DN = '+MaValeurToStr(PaireFractalValueH4[kk,1],Digits)+' le '+DateTimeToStr(PaireFractalDateH4[kk,1])
+' -> Fractal UP = '+MaValeurToStr(PaireFractalValueH4[kk,2],Digits)+' le '+DateTimeToStr(PaireFractalDateH4[kk,2]) ) ;
end
else
begin
Lprint(PaireDevise[kk]+' BUY accepté par UseFractalSlowToOpenTrade car -> Slow Fractal DN = '+MaValeurToStr(PaireFractalValueH4[kk,1],Digits)+' le '+DateTimeToStr(PaireFractalDateH4[kk,1])
+' -> Fractal UP = '+MaValeurToStr(PaireFractalValueH4[kk,2],Digits)+' le '+DateTimeToStr(PaireFractalDateH4[kk,2]) ) ;
end;
end;
- Detection for SELL signal if :
Code: Select all
NbTradeBuy := IsThisDeviseTradable(PaireDevise[kk],0,0);
NbTradeSell := IsThisDeviseWithoutSLTradable(PaireDevise[kk],1,0);
//Sell
if ( NbTradeSell < MACD_NbTradeMax[kk]) and (NbTradeBuy = 0) and
( PaireMACD_D1Main[kk,1] < PaireMACD_D1Main[kk,2]) and ( PaireMACD_D1Main[kk,2] < PaireMACD_D1Main[kk,3]) and
( _STOD1SLOW[kk,1] >= 100-MACD_StochLevelToTrade[kk]) and ( _STOD1FAST[kk,1] < _STOD1SLOW[kk,1]) and ( _STOD1FAST[kk,1] < _STOD1FAST[kk,2]) and
( PaireMA5[kk,1] < PaireMA5[kk,2]) and ( PaireMA5[kk,2] < PaireMA5[kk,3]) and ( PaireMA25[kk,1] - PaireMA25[kk,2] < MACD_DeltaPipsMA25[kk]*Point ) and
((MonNbHour > MACD_HOURDELAY[kk] ) or (MonNbHour=9999)) and ((MonNbHourHistoBUY > MACD_HOURDELAY2[kk] ) or (MonNbHourHistoBUY=9999)) then
begin
- Nb Buy Trade = 0
- 3 last Daily MACD MAIN are DOWN
- Daily Stoch Slow > (param for each pair) (default param 30)
- Daily STOCH Fast bar 1 < Stoch Fast bar 2
- MA5 is Down -> MA5 1 < MA5 2 and MA5 2 < MA5 3
- MA25 is Down or UP less than "delta pips mini" (param for each pair) between MA25 2 and MA25 1 for Down direction
- Delay between 2 live trades > (param for each pair) (default 24H)
- Delay between Now and LastHisto trade > (param for each pair) (default 4H)
Add control Nb pips between last live trade like this
Code: Select all
DistanceLastPrice := true;
DernierPrix := RenvoieLastOpenPrice(PaireDevise[kk],0);
if (DernierPrix > 0) then
begin
if MonBid > DernierPrix then
begin
if (MonBid - DernierPrix < MACD_DistanceInterTrade[kk]*Point) then DistanceLastPrice := false;
end
else
begin
if (DernierPrix - MonBid < MACD_DistanceInterTrade[kk]*Point) then DistanceLastPrice := false;
end;
end;
Code: Select all
//contrôle distance S/R > MACD_DeltaPipsFromSRToTakeTrade[kk]
DistanceSR := true;
for k:=0 to 50 do
begin
MonObjet := 'SSSR#'+IntTostr(k);
if ObjectExists(MonObjet) then
begin
MonTypeZone := ObjectGet(MonObjet,OBJPROP_STYLE);
MonNbHitZone := ObjectGet(MonObjet,OBJPROP_WIDTH);
if MonNbHitZone >=4 then
begin
MonPrixHaut := RoundTo(ObjectGet(MonObjet, OBJPROP_PRICE1),-digits);
MonPrixBas := RoundTo(ObjectGet(MonObjet, OBJPROP_PRICE2),-digits);
// Prix trop proche S/R ou dans S/R
if ((MonBid >= MonPrixHaut) and (MonBid - MonPrixHaut < (250 * MonPoint) )) or
((MonBid >= MonPrixBas) and (MonBid <= MonPrixHaut)) or (MonPrixHaut * MonPrixBas =0) then
begin
DistanceSR := false;
break;
end;
end;
end
else break;
end;
Code: Select all
// si date fractal Slow DN est moins récente que Slow UP -> sens fractal = hausse sinon baisse
if UseFractalSlowToOpenTrade then
begin
if (PaireFractalDateH4[kk,1]>0) and (PaireFractalDateH4[kk,2]>0) and (PaireFractalDateH4[kk,2] < PaireFractalDateH4[kk,1]) then
begin
DistanceSr := false;
Lprint(PaireDevise[kk]+' SELL accepté par UseFractalSlowToOpenTrade car -> -> Slow Fractal UP = '+MaValeurToStr(PaireFractalValueH4[kk,2],Digits)+' le '+DateTimeToStr(PaireFractalDateH4[kk,2])
+' -> Fractal DN = '+MaValeurToStr(PaireFractalValueH4[kk,1],Digits)+' le '+DateTimeToStr(PaireFractalDateH4[kk,1])) ;
end
else
begin
Lprint(PaireDevise[kk]+' SELL refusé par UseFractalSlowToOpenTrade car -> -> Slow Fractal UP = '+MaValeurToStr(PaireFractalValueH4[kk,2],Digits)+' le '+DateTimeToStr(PaireFractalDateH4[kk,2])
+' -> Fractal DN = '+MaValeurToStr(PaireFractalValueH4[kk,1],Digits)+' le '+DateTimeToStr(PaireFractalDateH4[kk,1])) ;
end;
end;
Next post to detail Money Management and Control Open Trade...