MQL 4 Programcıları için Sorular ve Cevaplar - sayfa 6

 
karmaşık kod, daha basit bir şey var mı?
 

1. Sipariş biletlerini bir dizide veya 2 değişkende saklayın.

2. Bunları birer birer seçmek için OrderSelect'i kullanın (burada bir dizi daha uygundur).

3. Mevcut an için türü kontrol edin.

4. OP_BUY || OP_SELL -> İkinci bilet için OrderDelete.

 

lütfen basit bir örnek yazın, çok şey anladım ama seçim sırası ile bu sadece bir trafik sıkışıklığı!

 

İşte kod nerede hata var? Bir geciktirici tetiklendiğinde ikinci geciktiriciyi kaldırmaz ......


eğer (MA1<MA2)
{
if(n==0)
{
//============================================== ================================================== ===============//

tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0, CLR_NONE );
if(tiket<0) Alert("Hata # - ",GetLastError()," Cihazda ", Symbol()); //bir hata yazar//
//============================================== ================================================== =============//
t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,sona erme);
//============================================== ================================================== =============//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,sona erme);
//============================================== ================================================== =============//

//============================================== ================================================== ===============//
}
//============================================== ================================================== ===============//
başka
//============================================== ================================================== ==============//
eğer (MA1>MA2)
{
tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Teklif,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
if(tiket<0) Alert("Hata # - ",GetLastError()," Cihazda ", Symbol()); //bir hata yazar//
//============================================== ================================================== =============//
t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,sona erme);
//============================================== ================================================== =============//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,sona erme);
//============================================== ================================================== =============//
}
//============================================== ================================================== ===============//
// SELLSTOP işe yaradıysa, BUYSTOP'u kaldırın
if(Sipariş Seçimi(t1, SELECT_BY_TICKET))
{
if(OrderType()==OP_SEL)
{
SiparişSil(t2);
}
}
//----
// BUYSTOP işe yaradıysa, SELLSTOP'u kaldırın
if(Sipariş Seçimi(t2, SELECT_BY_TICKET))
{
if(OrderType()==OP_BUY)
{
SiparişSil(t1);
}
}

 

Şartlar konusunda kafalar karıştı. Bana öyle geliyor ki {} parantezleriniz var, bunlar olması gereken yerde değil:

 if ( n == 0 )
{
         if (MA1<MA2) 
        {
                 //==================================================================================================================//

                tiket= OrderSend ( Symbol (),OP_BUY,Lots, NormalizeDouble (Ask, Digits ),Slip,slb,tpb, NULL ,MagicNumber, 0 , CLR_NONE ); 
                 if (tiket< 0 ) Alert ( "Ошибка № - " , GetLastError (), " На инструменте " , Symbol ()); //пишет ошибку// 
                 //================================================================================================================//
                t2 = OrderSend ( Symbol (), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip, 0 ,tpb, 0 , MagicNumber,expiration);
                 //================================================================================================================//
                t1 = OrderSend ( Symbol (), OP_SELLSTOP, Lots*Overlot+ 1 ,OtkrSS,Slip, 0 ,slb, 0 , MagicNumber,expiration);
                 //================================================================================================================//

                 //==================================================================================================================//
        }
         //==================================================================================================================// 
         else 
         //=================================================================================================================// 
         if (MA1>MA2) 
        {
                tiket= OrderSend ( Symbol (),OP_SELL,Lots, NormalizeDouble (Bid, Digits ),Slip,sls,tps, NULL ,MagicNumber, 0 , CLR_NONE );
                 if (tiket< 0 ) Alert ( "Ошибка № - " , GetLastError (), " На инструменте " , Symbol ()); //пишет ошибку//
                 //================================================================================================================//
                t2 = OrderSend ( Symbol (), OP_BUYSTOP, Lots*Overlot+ 1 ,OtkrSS1,Slip, 0 ,sls, 0 , MagicNumber,expiration);
                 //================================================================================================================//
                t1 = OrderSend ( Symbol (), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip, 0 ,tps, 0 , MagicNumber,expiration);
         //================================================================================================================//
        }
}
//==================================================================================================================//
// если сработал SELLSTOP удаляем BUYSTOP
if ( OrderSelect (t1, SELECT_BY_TICKET))
{
         if (OrderType()==OP_SELL)
        {
                OrderDelete(t2);
        }
}
//----
// если сработал BUYSTOP удаляем SELLSTOP
if ( OrderSelect (t2, SELECT_BY_TICKET))
{
         if (OrderType()==OP_BUY)
        {
                OrderDelete(t1);
        }
}

Veya benzeri bir şey.

 
hayır yardımcı olmadı ne yazık ki...
 

Şaşırtıcı bir şekilde, benzer bir uzmanım var. Onunla her şeyi açıkça aynı şekilde kontrol ettim. çalışıyor ama bu çalışmıyor...

fark, başka bir EA'da satın alma girişi için yalnızca bir poz ve bekleyen iki poz olmasıdır.

 

küresel değişkenlerdeki biletler? (dış başlangıç ve diğer işlev)

değilse, her onay işareti sıfırlanır.

Expert Advisor'ın her adımında daha fazla Print()-s ekleyin, o zaman nerede kilitlendiğini ve ne yapmadığını anlayacaksınız.

 

Yaşasın Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Kazandı !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1

Teneke!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
hasayama :

küresel değişkenlerdeki biletler? (dış başlangıç ve diğer işlev)

değilse, her onay işareti sıfırlanır.

Expert Advisor'ın her adımında daha fazla Print()-s ekleyin, o zaman nerede kilitlendiğini ve ne yapmadığını anlayacaksınız.

Size delicesine minnettarım, biletlerin başlangıçta çift olarak açıklandığı ve siparişin 1.0 ve 2.0 olarak listelenemediği anı kaçırdım, bu yüzden silme işlevi kayan noktalı bir şey bekliyordu.