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

 
deathmond1990 :
Merhaba. Soru şudur: Belirli bir ticaret dönemi (yani bir mum için) için kene değerlerini (karşılık gelen fiyatlar) tek boyutlu bir diziye sürmek mümkün müdür? Ve bunu, mumun oluşumu sırasında dizilim oluşacak şekilde yapmak. MQL4'te gerçek mi? Cevap için minnettar olacağım.


Gerçekten. Dinamik dizi ve git.

 //-----------------------+
int k= 0 ;       //на глобальном уровне
double тики[];
//----------------
void OnTick ()
  {
   ArrayResize (тики,k+ 1 );
   тики[k]= Bid ;
   k++;
  }
//+------------------------
 
Alekseu Fedotov :


Gerçekten. Dinamik dizi ve git.

çok teşekkürler =)
 
Selamlar beyler! Bunun bir sel ile karıştırılmasını istemiyorum, ancak bu işlev olmadan yapamam. Arkadaşlar, biri bana tüm siparişleri yineleyen ve aynı anda iki siparişi silen bir fonksiyon konusunda yardımcı olabilir mi? mevcut olanlardan da kazanç sağlar.
 
Arseniy Barudkin :
Selamlar beyler! Bunun bir sel ile karıştırılmasını istemiyorum, ancak bu işlev olmadan yapamam. Arkadaşlar, biri bana tüm siparişleri yineleyen ve aynı anda iki siparişi silen bir fonksiyon konusunda yardımcı olabilir mi? mevcut olanlardan da kazanç sağlar.

OrderCloseBy'yi aramayı deneyin
 

Terminali normal ve anormal modlarda kapattıktan sonra bile tüm global değişkenlerin verilerinin kaydedildiğinden nasıl emin olabilirim?

Soru, aşağıdaki gibi kodun başında bildirilen değişkenlerle ilgilidir:

#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double  VAR1 = 1;

double VAR2[1000];

VAR1 ve VAR2 değerlerinin kaybolmaması gerekir (Uzman Danışmanın çalışması sırasında dizi verilerle doldurulur). Şimdiye kadarki tek fikir, her tıklamada bir dosyaya (global.txt) yazmak ve terminal başlatıldığında, bu dosyadan (global.txt) okuyup değişkenleri yeniden oluşturmak ve ardından her tıklamada yeniden yazmaktır. Başka ne seçenekler var?

 
smart_man :

Terminali normal ve anormal modlarda kapattıktan sonra bile tüm global değişkenlerin verilerinin kaydedildiğinden nasıl emin olabilirim?

Soru, şu şekilde bildirilen değişkenlerle ilgilidir:

extern double  VAR1 = 1;

double VAR2[1000];

VAR1 ve VAR2 değerlerinin kaybolmaması gerekir (Uzman Danışmanın çalışması sırasında dizi verilerle doldurulur). Şimdiye kadarki tek fikir, her tıklamada bir dosyaya (global.txt) yazmak ve terminal başlatıldığında, bu dosyadan (global.txt) okuyup değişkenleri yeniden oluşturmak ve ardından her tıklamada yeniden yazmaktır. Başka ne seçenekler var?

Seçenek

İstemci terminalinin genel değişkenleri

//--------

Küresel düzeyde bildirilen değişkenlerle karıştırılmamalıdır

 
fxtz :

Soru Metatrader 4'te, tek bir tıklamayla belirli bir zararı durdur ve belirli bir kâr ile seçtiğim 2 ila 250 pozisyonu açmak için bir program yazmak mümkün mü? Tek tek elle açmamak için


Bir enstrümanda bu kadar çok sipariş açabileceğiniz bir DC buldunuz mu? Genellikle 100 sipariş tüm enstrümanlar için limittir...

Ve evet, 100'ü açtığı ortaya çıktı.

 
Alekseu Fedotov :

OrderCloseBy'yi aramayı deneyin

Teşekkür ederim! Ama bir şekilde bu siparişlerin biletlerini en az 3 sipariş arasından seçmem gerekiyor, daha sıklıkla 5 ila 10'dan fazla sipariş var, gerçekten bu siparişlerin lotlarını ve karlarını ayrı ayrı hesaplamam ve karşılaştırmam gerekiyor mu?!

 
Arseniy Barudkin : Siparişler için bilet seçmeniz gerekiyor, bu siparişlerin lotlarını ve karlarını ayrı ayrı hesaplamak ve karşılaştırmak gerçekten gerekli mi?!

Durum sandığınızdan çok daha kötü. OrderSelect() işlevi tarafından seçilen bir seferde yalnızca bir sipariş kullanılabilir. Ve ilk sipariş seçildiğinde, onu neyle karşılaştırabiliriz? Esnaf gerçekten böyle bir şey yapıyor

 double МинПрофит= 1000000 , МаксПрофит=- 1000000 ;
int МаксТикет= 0, МинТикет= 0 ;
for ( int Номер= OrdersTotal - 1 ; Номер>= 0 ; Номер--)
{
   if (! OrderSelect (Номер, SELECT_BY_POS )) continue ;
   if ( OrderProfit ()>МаксПрофит)
   {
      МаксТикет= OrderTicket ();
      МаксПрофит= OrderProfit ();
   }
   else if ( OrderProfit ()<МинПрофит)
   {
      МинТикет= OrderTicket ();
      МинПрофит= OrderProfit ();
   }
 }
Sonra bulunan biletlerin değerine bakın - aniden sıfır oldular !!!
 
STARIJ :

Durum sandığınızdan çok daha kötü. OrderSelect() işlevi tarafından seçilen bir seferde yalnızca bir sipariş kullanılabilir. Ve ilk sipariş seçildiğinde, onu neyle karşılaştırabiliriz? Esnaf gerçekten böyle bir şey yapıyor

Sonra bulunan biletlerin değerine bakın - aniden sıfır oldular !!!

Yardım için teşekkürler! Bu şekilde bırakılırken, şimdi fonksiyonun çağrıldığı koşulları biraz değiştirmeye karar verdim. Genel olarak, bana çok yardımcı oldun))
 void MarginDefuse( double lot1= 0 , double lot2= 0 )
{
 int ticket1= 0 ,ticket2= 0 ,type=- 1 ;
 double profit1= 0 ,profit2= 0 ;
 bool res1= false ,res2= false ;
 // Выделение
 for ( int i= 0 ; i< OrdersTotal (); i++)
 {
   if (! OrderSelect (i, SELECT_BY_POS )) continue ; // Что-то помешало - идем к следующему
   if ( OrderSymbol () != Symbol ()) continue ;           // Чужой график
   if ( OrderType ()< 2 && OrderMagicNumber () == Magic)
  {
   if ( OrderLots ()>=lot1 && OrderProfit ()< 0 )
   {
    ticket1= OrderTicket ();
    lot1= OrderLots ();
    type= OrderType ();
    profit1= OrderProfit ();
   }
  }
 }
 for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS )) continue ; // Что-то помешало - идем к следующему
   if ( OrderSymbol () != Symbol ()) continue ;           // Чужой график
   if ( OrderType () != type && OrderType ()< 2 && OrderMagicNumber () == Magic)
  {
   if ( OrderLots () >= lot2/Multipler && OrderProfit ()> 0 && OrderLots ()>lot1)
   {
    ticket2 = OrderTicket ();
    lot2 = OrderLots ();
    profit2= OrderProfit ();
   }
  }
 }
 if ((profit1+profit2)> 0 && lot1<lot2)
 {
   while (! RefreshRates ());
   if (ticket1)
  {
   if ( OrderSelect (ticket1, SELECT_BY_TICKET ))
   res1=OrderCloseX(ticket1,lot1);
  }
   if (ticket2)
  {
   if ( OrderSelect (ticket2, SELECT_BY_TICKET ))
   res2=OrderCloseX(ticket2,lot2);
  }
   if (res1 && res2)
   DeletePos();
 }
}