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
+36 -5
View File
@@ -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<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()
{
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++)