PaPP v2: dynamic TP/SL ogni barra (median corrente)

This commit is contained in:
pietro_giacobazzi
2026-06-16 09:55:03 +02:00
parent a09c9111bc
commit 2b113ac0ab
+31
View File
@@ -118,6 +118,34 @@ void TrailAll()
} }
} }
//+------------------------------------------------------------------+
void UpdateTPSL(double median)
{
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;
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<point) continue;
double newTP = NormalizeDouble(median,_Digits);
double newSL = NormalizeDouble(isBuy ? entry-tpDist : entry+tpDist,_Digits);
if(MathAbs(newTP-currTP)<=point && MathAbs(newSL-currSL)<=point) continue;
if(DebugPrint) Print(">>> UPDATE t",t," TP=",DoubleToString(newTP,_Digits),
" SL=",DoubleToString(newSL,_Digits));
trade.PositionModify(t,newSL,newTP);
}
}
//+------------------------------------------------------------------+ //+------------------------------------------------------------------+
void OnTick() void OnTick()
{ {
@@ -138,6 +166,9 @@ void OnTick()
double median = sum/valid; double median = sum/valid;
//--- Update TP/SL per tutte le posizioni con la mediana corrente
UpdateTPSL(median);
//--- Dispersione MA = banda strutturale del cluster //--- Dispersione MA = banda strutturale del cluster
int dc=0; double ds=0; int dc=0; double ds=0;
for(int m=0;m<8;m++) for(int m=0;m<8;m++)