[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 636

 

İyi insanlar, yardım edin, çözemiyorum, TrailingStop olması gerektiği gibi çalışmıyor, SATIŞ'ta anlaşma açılırsa, iz iyi çalışıyor, ancak AL açılırsa, nedense hemen stop değiştirilebilir. Hatanın nerede olduğunu çözemiyorum.... İŞTE KOD:

harici int TP = 50;
harici int SL = 50;
extern int İzleyen = 15;

int init()
{dönüş(0);}
int tanım()
{dönüş(0);}

int başlangıç()
{
//========= Başabaş seviyesinin hesaplanması ======
int i;
çift lotBUY=0;
çift lotSEL=0;
çift toplamBUY=0;
çift toplamSEL=0;

(i=0; i<SiparişToplam(); i++) için
{
(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) devam ederse;
(OrderSymbol()!=Symbol()) devam ederse;
if (OrderType()==OP_BUY)
{
lotBUY=lotsBUY+SiparişLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SEL)
{
lotSEL=lotSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
çift fiyatAL=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
çift fiyatSEL=0;
if (lotsSEL!=0) fiyatSEL=sumSEL/lotsSEL;

//======== Bir pozisyon açma =====


çift MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Yeşil);
if (Sipariş Toplamı() < 1 && Sor<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= İzleyen Durak =======

for(i = 0; i <= SiparişlerToplam(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && İzleyen!=0)
{
if(priceSEL-Ask>=Sondaki*Puan && OrderStopLoss()>(Sor+Sondaki*Puan))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0, CLR_NONE );
}
}
if (OrderType()==OP_BUY && İzleyen!=0)
{
if(Bid-priceBUY>=Sondaki*Puan && (Teklif Noktası*Sondaki)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
dönüş(0);

}

Öyle bir an var ki, TrailingStop bloğunda priceBUY'u OrderOpenPrice() olarak değiştirirseniz, her şey çalışır, ancak bunun açılış fiyatından değil, başabaş seviyesinden takip etmesine ihtiyacım var ..... SAT üzerinde çalışır, ama nedense satın almıyor .... Hatanın nerede olduğunu anlamıyorum ..... SOS !!!!!!!!

 
Roman. :


Bu bir hata değildir - bu, min. denge - yani sayı birleştirilir - geçiş sona erer ve bir sonraki giriş parametreleri grubuyla yenisi başlar - Test Cihazı optimizasyon sekmesinin onay kutularına ve ayarlanmış sınır değerlerine bakın:

Teşekkür ederim!
 

Tünaydın!! Danışmanım bu yerdeki siparişleri kaldırır.

 if (Summaprofita()>=Profit_v_balans )
        {
         for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
           {
               bool error=true;
             OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
            
             if ( magic== OrderMagicNumber ( ) && OrderSymbol ()== Symbol ())
              {
              
                 OrderClose ( OrderTicket ( ), OrderLots ( ), OrderClosePrice ( ) , 0 , CLR_NONE ); error=false;
                           Sleep ( 1000 );
             OrderDelete ( OrderTicket ());error=false;
         } } }
        

Burada, her şey yolunda görünmeden önce - 2-5 sipariş varken her durumda normal şekilde temizledim. Burada ve yeni sürümde istediğiniz sipariş türü 20, 50 adet her iki tarafta da var. Kısacası temizlemiyor. Eh, iki, üç, dört kez temizler ve sonra aniden hayır!!!

Test cihazında nasıl göründüğü ilginçtir - genel olarak, fiyatın yakınında bir dizi siparişi kaldırır, ancak hepsini değil!! Hangi sapkınlıklar öngörülebilir, icat edilebilir, hayal edilebilir, neyin kapatılacağı kesindir?

Doğru, peki, her şey eskisi gibi miydi? Daha önce kapandı mı? Başka neye ihtiyacı var?????

 

İyi insanlar, yardım edin, çözemiyorum, TrailingStop olması gerektiği gibi çalışmıyor, SATIŞ'ta anlaşma açılırsa, iz iyi çalışıyor, ancak AL açılırsa, nedense hemen stop değiştirilebilir. Hatanın nerede olduğunu çözemiyorum.... İŞTE KOD:

extern int TP = 100;
extern int SL = 100;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;



//======== Открытие позиции =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);
}

Öyle bir an var ki, TrailingStop bloğunda priceBUY'u OrderOpenPrice() olarak değiştirirseniz, her şey çalışır, ancak açılış fiyatından değil, başabaş seviyesinden izlemem gerekir ..... SAT üzerinde çalışır, ancak nedense satın almıyor .... Hatanın nerede olduğunu anlamıyorum ..... SOS !!!!!!!!
 
MIR-ASOV :

İyi insanlar, yardım edin, çözemiyorum, TrailingStop olması gerektiği gibi çalışmıyor, SATIŞ'ta anlaşma açılırsa, iz iyi çalışıyor, ancak AL açılırsa, nedense hemen stop değiştirilebilir. Hatanın nerede olduğunu çözemiyorum.... İŞTE KOD:

Öyle bir an var ki, TrailingStop bloğunda priceBUY'u OrderOpenPrice() olarak değiştirirseniz, o zaman her şey çalışır, ancak açılış fiyatından değil, başabaş seviyesinden izlemem gerekir..... SAT üzerinde çalışır, ancak nedense satın almıyor .... Hatanın nerede olduğunu anlamıyorum ..... SOS !!!!!!!!

Değiştirmeden önce PriceBUY değerini Print() ile yazdırmayı deneyin, beklentilere uyuyor mu?
 
Değiştirmeden önce PriceBUY değerini Print() ile yazdırmayı deneyin, beklentilere uyuyor mu?
Evet kontrol ettim tamamen denk geliyor...... Aslında BUY için başabaş seviyesi emir açılış fiyatına eşit ama nedense çalışmıyor, OrderOpenPrice() ayarlıyorum her şey çalışıyor, priceBUY ayarladım , hayır ......
 
büyük olasılıkla açılış anında priceBUY değişkeninde sıfıra sahipsiniz ve bu nedenle Bid- priceBUY(0)==Bid ve buna göre
 
Dimka-novitsek :

Tünaydın!! Danışmanım bu yerdeki siparişleri kaldırır.

Burada, her şey yolunda görünmeden önce - 2-5 sipariş varken her durumda normal şekilde temizledim. Burada ve yeni sürümde istediğiniz sipariş türü 20, 50 adet her iki tarafta da var. Kısacası temizlemiyor. Eh, iki, üç, dört kez temizler ve sonra aniden hayır!!!

Test cihazında nasıl göründüğü ilginçtir - genel olarak, fiyatın yakınında bir dizi siparişi kaldırır, ancak hepsini değil!! Hangi sapkınlıklar öngörülebilir, icat edilebilir, hayal edilebilir, neyin kapatılacağı kesindir?

Doğru, peki, her şey yoluna girmeden önce ??? Daha önce kapandı mı? Başka neye ihtiyacı var?????

Eh, bu işe yaramayacak.

  OrderClose ( OrderTicket ( ), OrderLots ( ), OrderClosePrice ( ) , 0 , CLR_NONE );

Emir kapatılana kadar, OrderClosePrice 0'a eşittir ve emri kapattığınız gerçek fiyatı değiştirmelisiniz, yani. SATIŞ emri ve AL için Teklif verilmesi durumunda sorun.

 
alsu :

Eh, bu işe yaramayacak.

Emir kapatılana kadar, OrderClosePrice 0'a eşittir ve emri kapattığınız gerçek fiyatı değiştirmelisiniz, yani. SATIŞ emri ve AL için Teklif verilmesi durumunda sorun.


hayır, kapatılmamış bir sipariş için OrderClosePrice() sıfırdan farklı - kontrol edin. OrderCloseTime() - evet
 
Teşekkürler!! Deneyeceğim, anlıyorum.