Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 31
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Bir seçenek olarak, bu durumda bu silme işlevini nasıl kaydedeceğimi söyleyin.
önce silinmesi gereken gecikme biletini belirlemelisin
bilet sıfırsa veya tanımlanmamışsa - silmeyin
Bu farklı siparişler içindir. Birini koşula göre silme, diğerini koşulsuz silme işlevi.
Soru, benim durumumda neden koşulsuzken silme işlevinin başarılı bir şekilde çalıştığı ve onu bir koşula koyarsanız, koşul oluştuğunda bir hata verdiğidir.
önce silinmesi gereken gecikme biletini belirlemelisin
bilet sıfırsa veya tanımlanmamışsa - silmeyin
Yani tanımlı, biri ticketD, diğeri ise ticketUP.
Yoksa bir şeyi karıştırıyor muyum?
Yani tanımlı, biri ticketD, diğeri ise ticketUP.
Yoksa bir şeyi karıştırıyor muyum?
TicketUP'ın zaten silinmiş olup olmadığı nasıl belirlenir?
Kaldırıldı, ticketUP'ı ihtiyacınız olan duruma güncelleyin, bu durumda gecikmeyi silme koşulu çalışmaz ve bu koşulun da koda eklenmesi gerekir.
TicketUP'ın zaten silinmiş olup olmadığı nasıl belirlenir?
Kaldırıldı, ticketUP'ı ihtiyacınız olan duruma güncelleyin, bu durumda gecikmeyi silme koşulu çalışmaz ve bu koşulun da koda eklenmesi gerekir.
Bu nedenle , ticketD biletli siparişler, ilk önce başka bir ticketUP oluşturulur (yokluk koşuluyla) ve bundan sonra zaten silinirler.
if (BuyLimitCount()== 0 && BuyCount()== 0 ){slB= NormalizeDouble (minpr1-pointsl* Point , 5 );
tpB= NormalizeDouble (minpr1+pointtp* Nokta , 5 );
int biletUP= OrderSend ( Symbol (), OP_BUYLIMIT , lotB, minpr1, 3 , slB, tpB, "" , MagicB, 0 , Red);
if (ticketUP==- 1 ) Yazdır ( "ERROR OP_BUY" ); başka Yazdır ( "OP_SATIN AL" );}
if (SellLimitCount()== 0 && SellCount() == 0 ){
slS= NormalizeDouble (maxpr1+pointsl* Nokta , 5 );
tpS= NormalizeDouble (maxpr1-pointtp* Nokta , 5 );
int biletD= OrderSend ( Symbol (), OP_SELLLIMIT , lotS, maxpr1, 3 , slS, tpS, "" , MagicS, 0 , Blue);
if (ticketD==- 1 ) Yazdır ( "ERROR OP_SELL" ); başka Yazdır ( "OP_SAT OK" );}
if (x!=maxpr1){x=maxpr1; OrderDelete (biletD);}
OrderDelete (ticketUP);
Kafam karıştıysa, o zaman ne?
Bu nedenle , ticketD biletli siparişler, ilk önce başka bir ticketUP oluşturulur (yokluk koşuluyla) ve bundan sonra zaten silinirler.
if (BuyLimitCount()== 0 && BuyCount()== 0 ){slB= NormalizeDouble (minpr1-pointsl* Point , 5 );
tpB= NormalizeDouble (minpr1+pointtp* Nokta , 5 );
int biletUP= OrderSend ( Symbol (), OP_BUYLIMIT , lotB, minpr1, 3 , slB, tpB, "" , MagicB, 0 , Red);
if (ticketUP==- 1 ) Yazdır ( "ERROR OP_BUY" ); başka Yazdır ( "OP_SATIN AL" );}
if (SellLimitCount()== 0 && SellCount() == 0 ){
slS= NormalizeDouble (maxpr1+pointsl* Nokta , 5 );
tpS= NormalizeDouble (maxpr1-pointtp* Nokta , 5 );
int biletD= OrderSend ( Symbol (), OP_SELLLIMIT , lotS, maxpr1, 3 , slS, tpS, "" , MagicS, 0 , Blue);
if (ticketD==- 1 ) Yazdır ( "ERROR OP_SELL" ); başka Yazdır ( "OP_SAT OK" );}
if (x!=maxpr1){x=maxpr1; OrderDelete (biletD);}
OrderDelete (ticketUP);
Kafam karıştıysa, o zaman ne?
Yani yine koşulsuz bir komutunuz var:
OrderDelete (ticketUP);
Kod neden değiştirilmedi?
En azından "düşünmek" için bir zaman ayırın ve anlayın + size ne yazdıklarını, ne tavsiye verdiklerini okuyun.
Bu arada, eğer işe yaramazsa, burada serbest çalışma var ...
Yani yine koşulsuz bir komutunuz var:
OrderDelete (ticketUP);
Kod neden değiştirilmedi?
En azından "düşünmek" için bir zaman ayırın ve anlayın + size ne yazdıklarını, ne tavsiye verdiklerini okuyun.
Bu arada, eğer işe yaramazsa, burada serbest çalışma var ...
Koşulsuzdur - çünkü silme bu şekilde gerçekleşir, ancak bir koşulla - hayır. Bu yüzden ne yapamayacağımı belirtmek için yazdım. Bu şekilde yazılırsa:
OrderDelete(biletD);
OrderDelete(ticketUP);
Ardından, her bir tıklamada, her bir tıklamada önceden oluşturulmuş siparişler (yokluk koşuluna göre) silinir. Ve koşulla yazarsanız:
if (x!=maxpr1){x=maxpr1; OrderDelete(biletD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Bu, bir koşula yaklaşırken bir kaldırma hatası yazar.
Bu durumda belirtilen siparişlerin silinmesi nasıl kaydedilir?
Koşulsuzdur - çünkü silme bu şekilde gerçekleşir, ancak bir koşulla - hayır. Bu yüzden ne yapamayacağımı belirtmek için yazdım. Bu şekilde yazılırsa:
OrderDelete(biletD);
OrderDelete(ticketUP);
Ardından, her bir tıklamada, her bir tıklamada önceden oluşturulmuş siparişler (yokluk koşuluna göre) silinir. Ve koşulla yazarsanız:
if (x!=maxpr1){x=maxpr1; OrderDelete(biletD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Bu, bir koşula yaklaşırken bir kaldırma hatası yazar.
Bu durumda belirtilen siparişlerin silinmesi nasıl kaydedilir?
Mevduat silme koşulu kaldırılamaz!
Bir gecikme açılırken biletUP ve biletD global değişkenlere yazılmalıdır
GlobalVariableSet ("ticketUP",ticketUP);
GlobalVariableSet("ticketD",ticketD);
ve oradan silmeden önce saymak için
biletUP=GlobalVariableGet("ticketUP")
biletD=GlobalVariableGet("ticketD")
Bu arada, oraya bakın (küresel olanlarda) - size neler oluyor, hangi bilete kayıtlı
Bundan sonra her şeyin sizin için olması gerektiği gibi çalışacağını düşünüyorum.
{
private :
template <typename T>
T _array[];
int _index;
int _err;
int _err_sys;
public :
CArray(){_index = - 1 ; _err = 0 ; _err_sys = 0 ;}
~CArray(){}
// template <typename T>
T operator []( int i){
if ((_index == - 1 ) || (i < 0 ) || (i > _index)) {_err_sys = - 1 ;}
return (_array[i]);
}
T at( int i){
if ((_index == - 1 ) || (i < 0 ) || (i > _index)) {_err_sys = - 1 ;}
return (_array[i]);
}
void push_back(T value ){
_array[++_index] = value ;
}
};
program kodunun bir parçası:
#property link "https://www.mql5.com"
#property version "1.1"
#property strict
#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
CArray *array;
int OnInit ()
{
int b = 1 ;
array = new CArray();
array.push_back(b);
int a = array.at( 0 );
//---
return ( INIT_SUCCEEDED );
}
...
Expert Advisor'ı gerçek veriler üzerinde çalıştırmayı denedikten sonra aşağıdaki hata oluşuyor: dahili hata #-1005
Neyi yanlış yapıyorum? Şimdiden teşekkürler!