Trailing Wert ist nicht korrekt
Situation:
1. ein Indikator
-. hat default Werte, die nie verändert werden (TF=h1)
2. ein EA (TF=h1)
-. liest (eigentlich) die Werte des Indikators aus
-. benutzt diese Werte zum Ein-/Ausstieg und Trailen
Problem:
Der SL wird anhand einer Indikatorline, also auf einen festen Wert gesetzt (im Gegensatz zu Bid/Ask+/-EinWert). Aber obwohl bei der 1. Order der SL-Wert korrekt vom Indikator übernommen wird, erscheint beim Trailing plötzlich ein Fantasie-Wert, bei dem ich nicht erkennen kann, woher der überhaupt kommt.
Frage: Was übersehe ich hier?
Code:
//=============================================================================
void CheckToOpen()
{
int tckt;
// === default values of Indi
double upLi=iCustom(Symbol(),MAframe,INDI, 0,0); //HT.up,UpLine
double dnLi=iCustom(Symbol(),MAframe,INDI, 1,0); //HT.dn,DnLine
double Ssl=iCustom(Symbol(),MAframe,INDI, 2,0); //chan.hi,UpperBorder
double Lsl=iCustom(Symbol(),MAframe,INDI, 3,0); //chan.low,LowerBorder
double sigL=iCustom(Symbol(),MAframe,INDI, 4,0); //sig.up,= 1
double sigS=iCustom(Symbol(),MAframe,INDI, 5,0); //sig.dn,=-1
bool ShortOnly=(dnLi>0); //IfStoppedOutLastShort
bool LongOnly=(upLi>0); //IfStoppedOutLastLong
Print(__FUNCTION__," HT.up=",DoubleToStr(upLi,_Digits)," HT.dn=",DoubleToStr(dnLi,_Digits),
" chan.hi=",DoubleToStr(Ssl,_Digits)," chan.lo=",DoubleToStr(Lsl,_Digits),
" sig.up=",DoubleToStr(sigL,_Digits)," sig.dn=",DoubleToStr(sigS,_Digits) );
// ============================================================= OpenShort
if( (sigS==-1 || ShortOnly) && NoOfRunnings(Symbol())!=-1 ) //Sig.dn,HT.dn
{
tckt=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,NULL,EAMAGIC,0,clrRed);
Print(__FUNCTION__," tck: ",IntegerToString(tckt)," SL: ",DoubleToStr(Ssl,_Digits));
if(tckt>0)
{
if(OrderSelect(tckt,SELECT_BY_TICKET))
{
Print(__FUNCTION__," order ",IntegerToString(tckt)," selectable");
if(!OrderModify(tckt,OrderOpenPrice(),
NormalizeDouble(Ssl,_Digits),OrderTakeProfit(),0,clrOrange) )
Print(__FUNCTION__," open short, SL: ",DoubleToStr(Ssl,_Digits) );
}
}
return;
}
// ============================================================= OpenLong
if( (sigL==1 || LongOnly) && NoOfRunnings(Symbol())!=1 ) //Sig.up,HT.up
{
tckt=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,NULL,EAMAGIC,0,clrGreen);
Print(__FUNCTION__," tck: ",IntegerToString(tckt)," SL: ",DoubleToStr(Lsl,_Digits));
if(tckt>0)
{
if(OrderSelect(tckt,SELECT_BY_TICKET))
{
Print(__FUNCTION__," order ",IntegerToString(tckt)," selectable");
if(!OrderModify(tckt,OrderOpenPrice(),
NormalizeDouble(Lsl,_Digits),OrderTakeProfit(),0,clrOrange) )
Print(__FUNCTION__," open long, SL: ",DoubleToStr(Lsl,_Digits) );
}
}
return;
}
}
//=============================================================================
void CheckToTrail()
{
double Ssl=iCustom(Symbol(),MAframe,INDI, 2,0); //chan.hi
double Lsl=iCustom(Symbol(),MAframe,INDI, 3,0); //chan.low
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderMagicNumber()!=EAMAGIC || OrderSymbol()!=Symbol()) continue;
// ============================================================= TrailShort
if( OrderType()==OP_SELL)
{
Print(__FUNCTION__," cur SL=",DoubleToStr(OrderStopLoss(),_Digits),
" chan.hi=",DoubleToStr(Ssl,_Digits) );
if(OrderStopLoss()>Ssl ) //SlHigherThanChan.hi
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),
NormalizeDouble(Ssl,_Digits),OrderTakeProfit(),0,clrOrange))
Print(__FUNCTION__," fail modify short, SL ",DoubleToStr(Ssl,_Digits) );
}
break;
}
// ============================================================= TrailLong
if(OrderType()==OP_BUY)
{
Print(__FUNCTION__," cur SL=",DoubleToStr(OrderStopLoss(),_Digits),
" chan.low=",DoubleToStr(Lsl,_Digits) );
if(OrderStopLoss()<Lsl ) //SlLowerThanChan.low
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),
NormalizeDouble(Lsl,_Digits),OrderTakeProfit(),0,clrOrange))
Print(__FUNCTION__," fail modify long, SL ",DoubleToStr(Lsl,_Digits) );
}
break;
}
}
}
Bild im Anhang zeigt Werte einer Bar nach der Eröffnung: Der erste SL bei der Eröffnung wird korrekt gelesen und gesetzt. Bei der nächsten Bar sollte er eigentlich runtergezogen werden - der Wert ist aber komplette Fantasie wie man sieht, gibt es den Wert nirgendswo.
Habt Ihr Hinweise? Danke. AVT
|