PaPP v2: dynamic TP/SL ogni barra (median corrente)
This commit is contained in:
@@ -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);
|
bool isBuy = PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY;
|
||||||
if(curBar==lastBar) return;
|
double entry = PositionGetDouble(POSITION_PRICE_OPEN);
|
||||||
lastBar = curBar;
|
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 ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
|
||||||
double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
|
double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
|
||||||
@@ -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++)
|
||||||
|
|||||||
Reference in New Issue
Block a user