Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 31

 
Bir seçenek olarak, bu durumda bu silme işlevini nasıl kaydedeceğimi söyleyin.
 
spoiltboy :
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

 
spoiltboy :

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.

koşulun düzeltilmesi gerekiyor, koşul olmadan imkansız, günlükler tüm sabit diski kaplayacak
 
Renat Akhtyamov :

ö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?

 
spoiltboy :

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.

 
Renat Akhtyamov :

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?

 
spoiltboy :

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 ...

 
Renat Akhtyamov :

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?

 
spoiltboy :

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.

 
Merhaba! Sorunu çözmeye kim yardımcı olacak, dinamik dizi için bir sarmalayıcı yazıyorum, işte sınıf kodu:
class CArray
{  
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 copyright "Copyright 2016, MetaQuotes Software Corp."
#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!