Kodlama yardımı.. Uyarı yerine filtrelenecek göstergeyi nasıl alabilirim? - sayfa 6

 
elihayun:
şimdiye kadar herhangi bir sorun görmüyorum (kod odaklı)

Ama mantıklı olarak şuna bak

if(isCrossed == 1 && < upLevel sor)

Yakın olduklarını kontrol etmiyorsunuz, sadece fiyatın hattan daha düşük olduğunu kontrol ediyorsunuz.

İstediğim buydu...filtrelemek...Bu satırı takaslara izin vermemek için kullanmak istiyorum. Niyet buydu. Çizginin genişliğini değiştirebilirsem çizgiye yakın olup olmadığını görmek için bir yol yapmama gerek yok, çizginin kendisini sınırlayıcı olarak kullanabilirim. Bantların genişliğini değiştirerek, çizgiye ne kadar yaklaştığını kontrol eden başka bir faktör varmış gibi aynı olacaktır. Bunu girme koşulu haline getirerek, üst satırın altında değilse alış emirlerinin açılmasını veya alt satırın üzerindeyse satış emirlerinin açılmasını filtreler veya durdurmalıdır.

Bunu yapmanın neden sipariş hataları oluşturmasına neden olacağı konusunda kafam karıştı?

 

Görünüşe göre hata, MM parametreleriyle ilgili yanlış parti boyutundan kaynaklanıyor...

Odağımı biraz değiştiriyorum...orijinal odağıma dönüyorum..

Trend bantları göstergesinin istediğim türde bir filtreleme etkisi üretemeyeceği sonucuna vardım. Sadece olmayacak.

Başlangıçta 'ang_AutoCh_HL-v1' kanal göstergesine bakıyordum. Bana istediğim filtre efektini vereceğini görebiliyorum, ancak arayacak arabellekleri yok... yani.....

İçinde arabellek yapabilir miyim? satır değerleri için? nesne 1 ve nesne 2? böylece onları EA'da destek ve direnç olarak kullanabilir miyim?

işte gösterge...

#property copyright "ANG3110@latchess.com"

//----------------------------------

#property indicator_chart_window

//----------------------------------

extern int Hours=24;

extern color col=SkyBlue;

//------------------

double lr,lr0,lrp;

double sx,sy,sxy,sx2,aa,bb;

int p,sName,fs;

int f,f0,f1;

double dh,dl,dh_1,dl_1,dh_2,dl_2;

int ai_1,ai_2,bi_1,bi_2;

double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;

double price_p1,price_p0,price_p2,price_01,price_00,price_02;

int p1,p0,p2,fp;

//*****************************************

int init() {

p=Hours*60/Period();

if (fs==0) {sName=CurTime(); fs=1;}

return(0);}

//*******************************

int deinit() {

ObjectDelete("1"+sName);

ObjectDelete("0"+sName);

ObjectDelete("2"+sName); }

//*******************************

int start() {

int i,n;

//------------------------------------------------------------------------------

if (f==1) {

p1=iBarShift(Symbol(),Period(),ObjectGet("1"+sName,OBJPROP_TIME1));

p0=iBarShift(Symbol(),Period(),ObjectGet("0"+sName,OBJPROP_TIME1));

p2=iBarShift(Symbol(),Period(),ObjectGet("2"+sName,OBJPROP_TIME1));

if (fp==0 && p!=p1) {p=p1; fp=1;}

if (fp==0 && p!=p0) {p=p0; fp=1;}

if (fp==0 && p!=p2) {p=p2; fp=1;}

}

//====================================================

sx=0; sy=0; sxy=0; sx2=0;

for (n=0; n<=p; n++) {sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);}

aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);

//----------------------------------------------------

for (i=0; i<=p; i++) {

lr=bb+aa*i;

dh=High-lr; dl=Low-lr;

//----------------------------------------------------

if (i<p/2) {if (i==0) {dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;}

if (dh>=dh_1) {dh_1=dh; ai_1=i;}

if (dl<=dl_1) {dl_1=dl; bi_1=i;}}

//----------------------------------------------------

if (i>=p/2) {if (i==p/2) {dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;}

if (dh>=dh_2) {dh_2=dh; ai_2=i;}

if (dl<=dl_2) {dl_2=dl; bi_2=i;}}}

//-------------------------------------

lr0=bb; lrp=bb+aa*(i+p);

//===================================================

if (MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;

if (MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;

if (MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2)) {if (MathAbs(dh_1-dh_2)=MathAbs(dl_1-dl_2)) f=2;}

//=================================================

if (f==1) {

for (n=0; n<=20; n++) { f1=0;

for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);

if (i==0 || i==p/2) dhm=0.0;

if (High-hai>dhm && i<p/2) {ai_1=i; f1=1;}

if (High-hai>dhm && i>=p/2) {ai_2=i; f1=1;} }

if (f==0) break;}

//----------------------------

for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);

dli=Low-hai;

if (i==0) dlm=0.0; if (dli<dlm) dlm=dli;}

ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);

hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);

//----------------------------

price_p1=hap;

price_p0=hap+dlm/2;

price_p2=hap+dlm;

price_01=ha0;

price_00=ha0+dlm/2;

price_02=ha0+dlm;

}

//=================================================

if (f==2) {

for (n=0; n<=20; n++) { f1=0;

for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);

if (i==0 || i==p/2) dlm=0.0;

if (Low-lai<dlm && i<p/2) {bi_1=i; f1=1;}

if (Low-lai=p/2) {bi_2=i; f1=1;}}

if (f==0) break;}

//----------------------------

for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);

dhi=High-lai;

if (i==0) dhm=0.0; if (dhi>dhm) dhm=dhi;}

la0=Low*(0-bi_2)/(bi_1-bi_2)+Low*(0-bi_1)/(bi_2-bi_1);

lap=Low*(p-bi_2)/(bi_1-bi_2)+Low*(p-bi_1)/(bi_2-bi_1);

//----------------------------------------------------------------

price_p1=lap;

price_p0=lap+dhm/2;

price_p2=lap+dhm;

price_01=la0;

price_00=la0+dhm/2;

price_02=la0+dhm;

}

//===================================================================================

ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);

ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);

ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);

//-----------------------------------------------------------------

ObjectSet("1"+sName,OBJPROP_COLOR,col);

ObjectSet("0"+sName,OBJPROP_COLOR,col);

ObjectSet("0"+sName,OBJPROP_STYLE,STYLE_DOT);

ObjectSet("2"+sName,OBJPROP_COLOR,col);

//---------------------------------------------

ObjectSet("1"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("1"+sName,OBJPROP_PRICE1,price_p1);

ObjectSet("1"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("1"+sName,OBJPROP_PRICE2,price_01);

ObjectSet("0"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("0"+sName,OBJPROP_PRICE1,price_p0);

ObjectSet("0"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("0"+sName,OBJPROP_PRICE2,price_00);

ObjectSet("2"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("2"+sName,OBJPROP_PRICE1,price_p2);

ObjectSet("2"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("2"+sName,OBJPROP_PRICE2,price_02);

//==================================================================

f=1; p1=p; p0=p; p2=p; fp=0;

//*************************************************************************************

return(0);}

//=====================================================================================[/PHP]

here is what I'm trying to add a buffer so I can extract the values I need...

#property copyright "ANG3110@latchess.com"

//----------------------------------

#property indicator_chart_window

//----------------------------------

extern int Hours=24;

extern color col=SkyBlue;

//------------------

double ExtBufferResistance[];

double ExtBufferMiddle[];

double ExtBufferSupport[];

double lr,lr0,lrp;

double sx,sy,sxy,sx2,aa,bb;

int p,sName,fs;

int f,f0,f1;

double dh,dl,dh_1,dl_1,dh_2,dl_2;

int ai_1,ai_2,bi_1,bi_2;

double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;

double price_p1,price_p0,price_p2,price_01,price_00,price_02;

int p1,p0,p2,fp;

//*****************************************

int init() {

p=Hours*60/Period();

if (fs==0) {sName=CurTime(); fs=1;}

SetIndexBuffer (4, ExtBufferResistance); //--resistance line

SetIndexBuffer (5, ExtBufferMiddle); //--middle line

SetIndexBuffer (6, ExtBufferSupport); //--support line

return(0);}

//*******************************

//===================================================================================

ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);

ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);

ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);

//------------------make indicator buffer for EA-------------------------------------

somehow get object 1 to put it's value into buffer 4

somehow get object 0 to put it's value into buffer 5

somehow get object 2 to put it's value into buffer 6

//------------------------draw chart-------------------------------------------------

[/php]

and then upgrade this EA....

[PHP]#property copyright "Copyright 2005, Chris Battles."

#property link "cbattles@neo.rr.com"

extern double TrailingStop = 5;

extern double TrailingStopTrigger = 19;

extern double StopLoss = 186;

extern double TakeProfit = 250;

extern double Lots = 0.4;

//---- ang_AutoCh_HL-v1 and Filter Parameters

extern int Hours=24;

extern color col=SkyBlue;

extern double TF = 30; //--which bar period for the custom indicator to use

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start(){

int cnt, ticket;

if(Bars<100){

Print("bars less than 100");

return(0);

}

double ema1a=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);

double ema2a=iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,0);

double ema3a=iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

double ema1b=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1);

double ema2b=iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1);

double ema3b=iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,1);

//----------channel filter

double resistance = iCustom(NULL,TF, "ang_AutoCh_HL-v1", Hours, col, 4, 0);

double support = iCustom(NULL,TF, "ang_AutoCh_HL-v1", Hours, col, 6, 0);

//--- end channel filter

and then make the order logic have second condition for entry...

[PHP]if (ema3bema1a && Ask < resistance){

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point, NULL,16384,0,Green);

if(ticket>0){

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if (ema3b>ema1b && ema3a support){

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point, NULL,16384,0,Red);

if(ticket>0) {

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

Gerçekten benim yapışma noktam, değerleri göstergeden çıkarmak, böylece EA bunları kullanabilir...Sanırım geri kalanını halledebilirim, eğer bana değerleri göstergeden EA'ya nasıl çıkaracağımı gösterebilirseniz.

 

Tamponlarla ne yaptığımı gerçekten bilmiyorum. Setbuffer satırları atmaya gidiyorum ve gerekli olup olmadığını veya ne olduğunu bile bilmiyorum

 
raff1410:
Merhaba...

Tamponlu indikatör,

Res && sup'ı aşağıdaki gibi arayabilirsiniz:

çift direnç = iCustom(NULL,TF,"Channel",24,col,0,0);

çift destek = iCustom(NULL,TF,"Channel",24,col,2,0);

Raff

ey adam bak!! Ben bundan bahsediyorum... İşe yarayıp yaramayacağını görmek için bunu denemek için sabırsızlanıyorum.

şimdi ben bu şeyleri ea'nın başına mı koymalıyım? göstergeye hangi ayarları kullandığını söylemek için?

//---- Kanal ve Filtre Parametreleri

harici int Saat=24;

dış renk col=SkyBlue;

dış çift TF = 30; //-- özel göstergenin kullanacağı çubuk periyodu

ve daha sonra...

çift direnç = iCustom(NULL,TF,"Kanal",Saat,sütun,0,0);

çift destek = iCustom(NULL,TF,"Kanal",Saat,sütun,2,0);

 

tamam yine bu hatayı 130 alıyorum yine ne var?

oh evet zararı durdur çok yakın.. tamam...

 

Merhaba...

Tamponlu indikatör,

kanal.mq4

Res && sup'ı aşağıdaki gibi arayabilirsiniz:

çift direnç = iCustom(NULL,TF,"Channel",24,col,0,0);

çift destek = iCustom(NULL,TF,"Channel",24,col,2,0);

Raff

Dosyalar:
channel.mq4  6 kb
 

Yeni Sorun...

Bunun üzerinde çalışan birkaç durdurma versiyonum var...Düşmeler, takip eden durdurma tetiğinin devreye girmemesinden kaynaklanıyor. Harekete geçmediği zaman, pozisyonu kapatan geri düşüş 'özsermaye durdurma'dır ve acı veren de BUDUR...

Birçok küçük düşüşten görebiliyorum ki, takip eden durdurma tetiklendiğinde, hesaba neredeyse öz sermaye zararı vermez. Bu tür kayıpların çoğunu sürdürebilir ve telafi edebilir, ancak öz sermayenin kapanmasına neden olan daha büyük kayıpların üstesinden gelemez.

böyle....

Açıklığı takip eden çubuk, arka durdurmayı devreye sokacak kadar hareket etmezse, pozisyonu kapatmanın bir yolu var mı?

Buna, şimdiki dönemi ve hareketli ortalama çizgilerinden önceki üç dönemi arayarak başladım. Temel olarak benim düşüncem, sinyalin ve bir çubuğun onaylanmasının, akımdan önceki üç periyottan çıkabileceği ve mevcut periyodun, takip eden durdurmayı tetikleyecek kadar hareket edip etmediğini görmek için kullanılabileceğiydi. Bu koşulun || olarak eklenebileceğini düşündüm. veya tüm açık emirleri kapatan öz sermaye durdurma koşulu.

Beni şaşırtan şey, takip eden durdurma tetikleyicisini tetikleyecek kadar hareket edip etmediğini nasıl anlayacağım, uzun olup olmamasına bağlı olarak yukarı hareket etmesi gerekecek, ancak kısa gidiyorsa aşağı hareket etmesi gerekecek. Bu nedenle, takip eden durdurma tetiği algılaması, tetiğe hangi yöne hareket edileceğini bilmek için uzun veya kısa bir konum olup olmadığına dikkat etmelidir. Bunu nasıl tespit edeceğinden emin değilim.

Bu raporu, büyük düşüşlerin küçüklerden daha büyük olmadığını hayal edebiliyorum ve öyle olsaydı, o zaman karlı olurdu.

Dosyalar:
whatever2.htm  292 kb
whatever2.gif  6 kb
 

bir ince ayar daha gerekli...

bu, kaybeden pozisyonları büyümeden kapatıyor... aynı zamanda KAZANAN pozisyonları da büyümeden önce kapatıyor

yapması gereken şey, sadece ilk on dakika içinde takip eden durdurmayı tetikleyecek kadar hareket ettirilmediyse pozisyonu kapatması...bunu yapmak için sadece 1 pip hareket etmesi gerekiyor sanırım...o yüzden sormuyorum ilk on dakikada çok Gerçekten sadece kuyruğunu döndürmediğinden ve açıldıktan hemen sonra pozisyona geri dönmediğinden emin olmak istiyorum. Kaybeden bunlar....

yani.... takip eden durdurmanın tetiklenip tetiklenmediğini tespit etmek ve eğer öyleyse çalışmasına izin vermek için yapılabilirse!! zamanın bir fonksiyonu olarak kapatmak yerine, takip edenin onu kapatmasına izin verin. Zaman kapama parametresinin birincil kapanış stratejisi olması amaçlanmamıştır, sadece takip eden durdurma devralana kadar kapanışı halletmek içindir.

Dosyalar:
whatever3.htm  304 kb
whatever3.gif  6 kb
 

Bu benim istediğimi yapmıyor...Bu sonuçlara bir anlam veremiyorum..

https://c.mql5.com/forextsd/forum/9/whatever3.htm

sadece bakıyorum çoğu şey sadece 10 dakika veya daha az açık (kriter karşılanmadıysa on dakika içinde kapanacak şekilde ayarladım) 19 dakika açık olan 52 numaralı sipariş ve açık olan 48 numaralı sipariş gibi çok az istisna dışında 15 dakika.

bu kısım çalışmıyor... OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice()

ne de bu çalışmıyor... if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

Kontrol etmemiz gereken şey, takip eden durdurmanın tetiklenip tetiklenmediğidir. Bunun fiyata dayalı olarak kapanmasını istemiyorum. Bunun, takip eden durdurmanın tetiklenmemesine bağlı olarak kapanmasını istiyorum. İlk başta, takip eden durdurmayı tetikleyecek kadar yükselip yükselmediğini kontrol etmemiz gerektiğini söylediğimin farkındayım..ama takip eden durdurma tetik kodunu veya bunun ne kadar uzakta olduğunu tam olarak anlamıyorum...Anlamıyorum. Bunun belirtilen aralıktan sonra bile kontrol etmek için tekrarlanıp durmayacağını ve teklif+Karın kriteri OrderOpenPrice olduğunda/olduğunda 15 veya 19 dakikada kapanacağını biliyor musunuz? Bunun yaptığı şey, takip eden durdurma tetiklenene kadar boşluk durdurma kriteri yerine kendisini baskın kapatma kriteri yapmaktır...

//+------------------------------------------------------------------+

void CloseOrder()

{

double Profit=ThresholdMove*Point;

int total = OrdersTotal();

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)

{

if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice() )

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

}

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

}

}

}

}

//+------------------------------------------------------------------+[/PHP]

Somewhere in this closing strategy there must be a way to detect if it's been triggered or not...

[PHP]//+------------------------------------------------------------------+

//| Variable End |

//+------------------------------------------------------------------+

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

if (CloseBuy1_1 == CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Sell) |

//+------------------------------------------------------------------+

if (CloseSell1_1 == CloseSell1_2) Order = SIGNAL_CLOSESELL;

//+------------------------------------------------------------------+

//| Signal End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(TrailingStopMode && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

Sonuç olarak, zaman kapama parametresi, amaçlandığı gibi çalışacak şekilde değiştirilemediği sürece çok agresiftir.

 

Üzgünüm, kodun tamamını incelemek için zamanım yok, ancak bu snippet'i inceleyelim.

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

Diyelim ki OrderOpenPrice = 1.2100

ve kar 0.0010

Bu nedenle, teklif 1.2100-0.0010 = 1.2090'dan küçük veya buna eşitse kısa ticareti kapatmak istersiniz.

Diyelim ki bir boşluk oldu ve fiyatlar 1.2090'ı atladı ve şimdi teklif fiyatı 1.2088. Formülünüze göre,

Teklif + Kar = 1.2088 + 0.0010 = 1.2098. Sisteminiz kar eşiğini aşmış olsa bile OrderOpenPrice'den büyük DEĞİLDİR. Böylece sipariş kapatılmayacaktır. Bana göre kapanış koşulunun mantığının yeniden değerlendirilmesi ve yeniden yazılması gerekiyor. Ayrıca, kısa işlemlerle uğraşırken Alış fiyatları ile işlem yapmalısınız, çünkü işlemi yalnızca satış fiyatından kapatabilirsiniz .

Bir tavsiye daha,

for (int cnt = 0 ; cnt = 0; cnt--) veya benzeri bir sayım döngüsü.

İyi şanlar.

Neden: