From 2b113ac0ab9c78b5fb7010e4c834581e2ea207fa Mon Sep 17 00:00:00 2001 From: pietro_giacobazzi Date: Tue, 16 Jun 2026 09:55:03 +0200 Subject: [PATCH] PaPP v2: dynamic TP/SL ogni barra (median corrente) --- PaPP v2/PaPP_Median_EA.mq5 | 41 +++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/PaPP v2/PaPP_Median_EA.mq5 b/PaPP v2/PaPP_Median_EA.mq5 index 51cb229..1349b9a 100644 --- a/PaPP v2/PaPP_Median_EA.mq5 +++ b/PaPP v2/PaPP_Median_EA.mq5 @@ -119,13 +119,41 @@ void TrailAll() } //+------------------------------------------------------------------+ -void OnTick() +void UpdateTPSL(double median) { - TrailAll(); + double point = SymbolInfoDouble(_Symbol,SYMBOL_POINT); + CTrade trade; + for(int i=PositionsTotal()-1; i>=0; i--) + { + ulong t=PositionGetTicket(i); + if(t<=0 || !PositionSelectByTicket(t)) continue; + if(PositionGetInteger(POSITION_MAGIC)!=Magic || PositionGetString(POSITION_SYMBOL)!=_Symbol) continue; - datetime curBar = iTime(_Symbol,_Period,0); - if(curBar==lastBar) return; - lastBar = curBar; + bool isBuy = PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY; + double entry = PositionGetDouble(POSITION_PRICE_OPEN); + double currSL = PositionGetDouble(POSITION_SL); + double currTP = PositionGetDouble(POSITION_TP); + double tpDist = MathAbs(median-entry); + if(tpDist>> UPDATE t",t," TP=",DoubleToString(newTP,_Digits), + " SL=",DoubleToString(newSL,_Digits)); + trade.PositionModify(t,newSL,newTP); + } + } + +//+------------------------------------------------------------------+ +void OnTick() + { + TrailAll(); + + datetime curBar = iTime(_Symbol,_Period,0); + if(curBar==lastBar) return; + lastBar = curBar; double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); @@ -138,6 +166,9 @@ void OnTick() double median = sum/valid; + //--- Update TP/SL per tutte le posizioni con la mediana corrente + UpdateTPSL(median); + //--- Dispersione MA = banda strutturale del cluster int dc=0; double ds=0; for(int m=0;m<8;m++)