MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1179

 
Mikhail :

Böyle bir istekte bulunduğumda:

Bu sonucu alıyorum:

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Sembol EURUSD_i Basamaklar 5 Nokta 1e-05

Böyle bir istekte bulunduğumda:

Bu sonucu alıyorum:

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Sembol EURUSD_i Basamak 0 Puan 0.0

Aynı zamanda şunu da belirtmek isterim ki Yazdır işlevini eklemezsem hiçbir hata oluşmaz, düzen değiştirilmeye bile çalışmaz. Sanki CTrade siparişimi görmüyor.

Sembolü kontrol edin ve sihirli sayı başarısız olur:

Sonuç:

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Bilet 2

Sihir, euro dolar sembolü olan 12345 olmalıdır.

Neden sembolü ve sihri alamıyorum?

Eğer çizgi:

değişmek

ve sihirli sayıya göre çeki kaldırın, o zaman fiyatlarda sorun var

2020.06.17 01:38:24.136 2020.01.02 07:40:00 sipariş #2 değiştirilemedi al stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Geçersiz fiyat]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: 1.00000'de #2'yi değiştirin (sl: 1.00000 tp: 1.00000) [geçersiz fiyat]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP değişikliği başarısız oldu! Sonuç Retcode: 10015, Retcode açıklaması: geçersiz fiyat

Ben zaten kafamı kırdım. başka bir danışmandaki aynı kodun bir patlama ile çalışmasına rağmen.

Neyi yanlış yapıyorum?

CSymbolInfo sınıfının bir nesnesini yanlış başlattınız (veya hiç başlatmadınız).

böyle bir satırınız yoksa asymbol.Name(Symbol()) ekleyin.

Öyleyse, neler olup bittiğini Name(string symbol) işlevinde hata ayıklayın.

Refresh() işlevinde m_digits alanlarının doldurulması vb.

ps Eklediklerinize bakılırsa, kesinlikle başlatılmamış bir sembolünüz var.

 
Mikhail :

Yeni bir onay işareti gelene kadar düğmeler hareket etmez. Benim gözlerimle gördüğüm bu. Fiyat değişir değişmez düğmeler hareket etti.

Her ne kadar bugün, yeni bir kene üzerinde bile, hiçbir şeyi değiştirmememe rağmen, düğmeler yeniden çizilmeyi bıraktı. Sadece arka plan hareket eder.

Açıklıyorum - dediğiniz gibi, OnTick'teki koordinatları değiştiriyorsunuz ve düğmelerin aslında NEXT tick üzerinde hareket ettiğini belirtiyorsunuz. Neyden sonra? koordinatları değiştirdiğiniz yerden mi, yoksa Mesih'in doğumundan mı?

 
Aleksey Mavrin :

CSymbolInfo sınıfının bir nesnesini yanlış başlattınız (veya hiç başlatmadınız).

böyle bir satırınız yoksa asymbol.Name(Symbol()) ekleyin.

Öyleyse, ne olduğunu Name(string symbol) işlevinde hata ayıklayın.

Refresh() işlevinde m_digits alanlarının doldurulması vb.

ps Eklediklerinize bakılırsa, kesinlikle başlatılmamış bir sembolünüz var.

kodun en üstünde satırlarım var
 #include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Trade\SymbolInfo.mqh>

CTrade atrade;
COrderInfo aorder;
CPositionInfo apos;
CDealInfo adeal;
CSymbolInfo asymbol;

Bu bir başlatma mı? Derlerken aşağıdaki bilgileri alıyorum

'Ticaret.mq5 için panel' Ticaret paneli.mq5 1 1

'Ticaret.mqh' ticaret.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'Sipariş Bilgileri.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

'PozisyonBilgisi.mqh' PozisyonBilgisi.mqh 1 1

'DealInfo.mqh' DealInfo.mqh 1 1

' SymbolInfo .mqh' SymbolInfo.mqh 1 1

oluşturulan kod 1 1

0 hata, 0 uyarı, 3192 msn geçti 1 1

Bir Buy Stop emri açtıktan sonra, tüm emirleri yeniden hesaplarım, bir açık emir seçerim ve sembol ile sihirli sayı arasında bir eşleşme olup olmadığını kontrol ederim:

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
           if (aorder.SelectByIndex(i))  
              if (aorder. Symbol ()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen())

Bu aşamada hiçbir şey olmuyor, zaten yukarıda yazdığım gibi, asymbol.Name() işlevi nedense açık bir siparişin sembolünü döndürmez, aorder.Magic() işlevi 0 değerini döndürür (sihirim 121345 olmasına rağmen) , asymbol.TickSize() işlevi 0 değerini döndürür. Yani kontrol geçmez ve buna göre siparişle daha fazla çalışma sonlandırılır. Lütfen " Ad(dize sembolü) işlevinde hata ayıklama ne olduğunu" açıklayın, bu ifadeyi tam olarak anlamıyorum. Ne eklenmeli ve nereye?

 
Aleksey Mavrin :

Açıklıyorum - dediğiniz gibi, OnTick'teki koordinatları değiştiriyorsunuz ve düğmelerin aslında NEXT tick üzerinde hareket ettiğini belirtiyorsunuz. Neyden sonra? koordinatları değiştirdiğiniz yerden mi, yoksa Mesih'in doğumundan mı?

Sanırım sıralama şu şekilde: yeni bir tik geliyor, panel koordinatlarını değiştiriyorum, panel arka planı ihtiyacım olan yere hareket etmeye başlıyor, bu esnada butonlar hareketsiz duruyor, yeni bir tik geliyor ve butonlar sağa hareket ediyor paneli takip ederek yerleştirin. Ve doğrudan Mesih'in Doğuşundan tiki ne üretilebilir?
 
Mikhail :

Bu aşamada hiçbir şey olmuyor, zaten yukarıda yazdığım gibi, asymbol.Name() işlevi nedense açık bir siparişin sembolünü döndürmez, aorder.Magic() işlevi 0 değerini döndürür (sihirim 121345 olmasına rağmen) , asymbol.TickSize() işlevi 0 değerini döndürür. Yani, kontrol geçmez ve buna göre sipariş durur. Lütfen " Ad(dize sembolü) işlevinde hata ayıklama ne olduğunu" açıklayın, bu ifadeyi tam olarak anlamıyorum. Ne eklenmeli ve nereye?

Sihirli 0'a bakılırsa emrin indeksinde/biletinde bir hata olabilir. Emir yapısına erişildiği anda yanlış emrin verileri oraya kaydedilir. Seçim döngüsünde, bir sonraki sayı, ihtiyacınız olana değil, son sipariş seçimine gidebilir. Son sipariş seçiminin verileri sipariş yapısından döndürülür.

 
Mikhail :
kodun en üstünde satırlarım var

Bu bir başlatma mı? Derlerken aşağıdaki bilgileri alıyorum

'Ticaret.mq5 için panel' Ticaret paneli.mq5 1 1

'Ticaret.mqh' ticaret.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'Sipariş Bilgileri.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

'PozisyonBilgisi.mqh' PozisyonBilgisi.mqh 1 1

'DealInfo.mqh' DealInfo.mqh 1 1

'SymbolInfo.mqh' SymbolInfo.mqh 1 1

oluşturulan kod 1 1

0 hata, 0 uyarı, 3192 msn geçti 1 1

Bir Buy Stop emri açtıktan sonra, tüm emirleri yeniden hesaplarım, bir açık emir seçerim ve sembol ile sihirli sayı arasında bir eşleşme olup olmadığını kontrol ederim:

Bu aşamada hiçbir şey olmuyor, zaten yukarıda yazdığım gibi, asymbol.Name() işlevi nedense açık bir siparişin sembolünü döndürmez, aorder.Magic() işlevi 0 değerini döndürür (sihirim 121345 olmasına rağmen) , asymbol.TickSize() işlevi 0 değerini döndürür. Yani kontrol geçmez ve buna göre siparişle daha fazla çalışma sonlandırılır. Lütfen " Ad(dize sembolü) işlevinde hata ayıklama ne olduğunu" açıklayın, bu ifadeyi tam olarak anlamıyorum. Ne eklenmeli ve nereye?

Kahretsin, neden anlamadığın bir şeyi kullanıyorsun (ya güçlü bir bavulsa)))

Ve yazdıklarını okumayı düşünmüyorsun bile

böyle bir satırınız yoksa asymbol.Name( Symbol() ) ekleyin.

ps Ayrıca başlatmanın ne olduğunu açıklamak istedim ama görünüşe göre faydasız olacak
 
Valeriy Yastremskiy :

Sihirli 0'a bakılırsa emrin indeksinde/biletinde bir hata olabilir. Emir yapısına erişildiği anda yanlış emrin verileri oraya kaydedilir. Seçim döngüsünde, bir sonraki sayı, ihtiyacınız olana değil, son sipariş seçimine gidebilir. Son sipariş seçiminin verileri sipariş yapısından döndürülür.

Bu aksaklığın neden olduğunu hala anlayamıyorum. Sonuç olarak, düğmelerle bir panel oluşturmaktan sorumlu olan kodu aldım, kodu aynı kodun iyi çalıştığı ve her şeyin çalıştığı Expert Advisor'a yeniden yazdım. Her durumda, teşekkür ederim!
 

Tünaydın!

Lütfen basit bir sorunu çözmeme yardım edin.

Boşluk sayacı. 10 puandan fazla olan boşlukları saymak istiyorum.

 int start()
{
int gap= 0 ;
int r= MathAbs (Close[ 2 ]-Open[ 1 ])/ Point ;
if (r>= 10 )
{
gap=gap+ 1 ;
}
Comment ( "ГЭП!========: " ,gap, "\n" ,
         "ВЕЛИЧИНА ГЭПА==: " ,r, "\n" );
return ( 0 );

"Gap" değişkeni sıfırlanır. nedenini anlamıyorum. Henüz denemedim. Araya giren döngüler ve statik - yardımcı olmuyor. Döngülerin yanlış yazıldığından şüpheleniyorum.

 
Alexey Belyakov :

Tünaydın!

Lütfen basit bir sorunu çözmeme yardım edin.

Boşluk sayacı. 10 puandan fazla olan boşlukları saymak istiyorum.

"Gap" değişkeni sıfırlanır. nedenini anlamıyorum. Henüz denemedim. Araya giren döngüler ve statik - yardımcı olmuyor. Döngülerin yanlış yazıldığından şüpheleniyorum.

Boşluk değişkeni, başlatma işlevinin kapsamındadır - ve her yeni onay işaretiyle sıfıra yeniden başlatılır

 
Alexey Belyakov :

Tünaydın!

Lütfen basit bir sorunu çözmeme yardım edin.

Boşluk sayacı. 10 puandan fazla olan boşlukları saymak istiyorum.

"Gap" değişkeni sıfırlanır. nedenini anlamıyorum. Henüz denemedim. Araya giren döngüler ve statik - yardımcı olmuyor. Döngülerin yanlış yazıldığından şüpheleniyorum.

 int gap= 0 ;
int start()
{
int r= MathAbs (Close[ 2 ]-Open[ 1 ])/ Point ;
if (r>= 10 )
{
gap++;
}
Comment ( "ГЭП!========: " ,gap, "\n" ,
         "ВЕЛИЧИНА ГЭПА==: " ,r, "\n" );
return ( 0 );
 int start()
{
static int gap= 0 ;
int r= MathAbs (Close[ 2 ]-Open[ 1 ])/ Point ;
if (r>= 10 )
{
gap=gap+ 1 ;
}
Comment ( "ГЭП!========: " ,gap, "\n" ,
         "ВЕЛИЧИНА ГЭПА==: " ,r, "\n" );
return ( 0 );