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

 
Vitaly Muzichenko # :

nereden başlayacağımı bilmiyorum

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   int H= 100 ;
   double b, a;
   if (prev_calculated== 0 ) {
     ArrayInitialize (Buffer1, EMPTY_VALUE );
     ArrayInitialize (Buffer2, EMPTY_VALUE );
  }

  b= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
  a= SymbolInfoDouble ( Symbol (), SYMBOL_ASK );

   if (rates_total-prev_calculated== 1 ) {
    Buffer1[H+ 1 ]= EMPTY_VALUE ;
    Buffer2[H+ 1 ]= EMPTY_VALUE ;
  }
   else if (rates_total == prev_calculated) { // сдвигаем данные только когда количество баров не поменялось (в случае появления нового бара они сдвигаются системой терминала)
     ArrayCopy (Buffer1, Buffer1, 1 , 0 , H);
     ArrayCopy (Buffer2, Buffer2, 1 , 0 , H);
  }
   // записываем новые данные
  Buffer1[ 0 ]=b;
  Buffer2[ 0 ]=a;
   return (rates_total);
}

Teoride, çalışması gerekir. Kontrol etmek.

PS Ve lütfen ArrayCopy işlevine sahip varyantın hızının ne kadar değiştiğini yazın. Benim için ilginç.

 
Vitaly Muzichenko # :

nereden başlayacağımı bilmiyorum

İşte mql5 için bir seçenek. Ama sadece Satış fiyatı için. Teklif için, kendiniz bitirin.

Gösterge arabelleğiyle çalışmak ve işaretlerle çalışmak dahil her şey orada ve gösterge arabelleğinin indekslenmesini nasıl tersine çevirmeye gerek olmadığına dair bir örnek.

1000 bar için hiç gecikme olmadan görüntülenir.

Dosyalar:
 
Alexey Viktorov # :

İşte mql5 için bir seçenek. Ama sadece Satış fiyatı için. Teklif için, kendiniz bitirin.

Gösterge arabelleğiyle çalışmak ve işaretlerle çalışmak dahil her şey orada ve gösterge arabelleğinin indekslenmesini nasıl tersine çevirmeye gerek olmadığına dair bir örnek.

1000 bar için hiç gecikme olmadan görüntülenir.

Kabul edilmiş! Teşekkür ederim!

 

İyi seyirler, geçenlerde MT4'te ML ile uğraşmaya başladım ve öyle bir anla karşılaştım ki: Kapalı bir siparişi takip etmek için normal bir fonksiyon yok. Algoritmam basittir: yeni bir mum göründüğünde, bekleyen iki STOPSELL ve BYSTOP siparişi verilir ve bunlardan biri kapandığında, kapalı olanın (sellstop veya bystop) izlenmesine ve kapalı olanın yerine bir siparişin verilmesine ihtiyacım var. . Siparişler verildi - bununla ilgili bir sorun yok, ancak anlayamıyorum - kapanan siparişlerin nasıl takip edileceğini, bir kod çizdim, ancak mesajda sadece CELLSTOP görüntüleniyor, BYSTOP'a yanıt vermiyor:


if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY))
   {
   Print("OrderType", OrderType());//Тут всегда только только "1"
   }
   if(OrderType()==0)
    {
    Print("Закрылся  BUYSTOP:", OrderTicket());
    }
   if(OrderType()==1)
   {Print("Закрылся   SELLSTOP:",  OrderTicket());} //Тут сообщает корректно - номер ордера

Ayrıca OnTrade veya OnTradeTransaction'ın çalışmadığı gerçeğiyle de karşılaştım, şöyle denedim:

 void OnTradeTransaction ()
 {
 Print ( "status - " ); 
 }  
 
MixanM # :

İyi seyirler, geçenlerde MT4'te ML ile uğraşmaya başladım ve öyle bir anla karşılaştım ki: Kapalı bir siparişi takip etmek için normal bir fonksiyon yok. Algoritmam basittir: yeni bir mum göründüğünde, bekleyen iki STOPSELL ve BYSTOP siparişi verilir ve bunlardan biri kapandığında, kapalı olanın (sellstop veya bystop) izlenmesine ve kapalı olanın yerine bir siparişin verilmesine ihtiyacım var. . Siparişler verildi - bununla ilgili bir sorun yok, ancak anlayamıyorum - kapanan siparişlerin nasıl takip edileceğini, bir kod çizdim, ancak mesajda sadece CELLSTOP görüntüleniyor, BYSTOP'a yanıt vermiyor:

 //+----------------------------------------------------------------------------+
int LastClose()
  {
   int result=- 1 ;
   datetime t= 0 ;
   int i=OrdersHistoryTotal()- 1 ;
   for ( int pos=i;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if (OrderSymbol()== _Symbol )
           {
             if (OrderType()==OP_BUY||OrderType()==OP_SELL)
              {
               if (t<OrderCloseTime())
                 {
                  t=OrderCloseTime(); result=OrderType();
                 }
              }
           }
        }
     }
   return (result);
  }
//+----------------------------------------------------------------------------+

MixanM OnTradeTransaction'ın çalışmadığı gerçeğiyle de karşılaştım, şöyle denedim:

MT5 için olduğu gibi
 
Merhaba arkadaşlar.
Soru böyle.
Bu hizmetteki kopyalama işlemleri uzun yıllardır değişmedi. Geliştiricilerin, ziyaretçilerinin rahatlığını düşünmekle hiç ilgilenmediği uzun zamandır izlenimi var.
Bir projeye ihtiyacı vardı.

Bu mümkün mü bilmiyorum?

1) İşlemlerin fotokopisine ihtiyacımız var, (danışman) Ne tür bir yük ve nasıl ölçüldüğünü bilmiyorum, birinden kopyalayıp yüzden fazla hesaba dağıtması gerekiyor.
Kopyalama hakkında soru. Örneğin, işlemler için lot işlemin yüzdesinden gelsin (belki de doğrudur, bunu bilmiyorum)) Yani benim hesabımda 100, abonenin hesabında 1000 var, ben mevduatın %3'ü ile bir anlaşma açın ve işlemimin yüzdesi olarak yeniden hesaplanan lot büyüklüğüne sahip. Yani benim için %3, 3 dolar ve abone sırasıyla %3 = 30 dolar için bir anlaşma açıyor.


2) Abonenin hesap verilerini çıkarmak mümkün mü? Yani adı soyadı ama en önemlisi bilançodaki tutar? Tüm bilgileri çıkarmak mümkün değilse, o zaman ne mümkün?

3) Sevgili programcılar, bu tür çalışmaların yaklaşık maliyetini tahmin edin, aldanmak istemiyorum, yeterli fiyatı anlamak istiyorum.
Teşekkür ederim!
 
Roman Voloshchuk kopyalama işlemleri bunca yıldır değişmedi. Geliştiricilerin, ziyaretçilerinin rahatlığını düşünmekle hiç ilgilenmediği uzun zamandır izlenimi var.
Bir projeye ihtiyacı vardı.

Bu mümkün mü bilmiyorum?

1) İşlemlerin fotokopisine ihtiyacımız var, (danışman) Ne tür bir yük ve nasıl ölçüldüğünü bilmiyorum, birinden kopyalayıp yüzden fazla hesaba dağıtması gerekiyor.
Kopyalama hakkında soru. Örneğin, işlemler için lot işlemin yüzdesinden gelsin (belki de doğrudur, bunu bilmiyorum)) Yani benim hesabımda 100, abonenin hesabında 1000 var, ben mevduatın %3'ü ile bir anlaşma açın ve işlemimin yüzdesi olarak yeniden hesaplanan lot büyüklüğüne sahip. Yani benim için %3 3 dolar ve abone sırasıyla %3 = 30 dolar ile bir anlaşma açıyor.


2) Abonenin hesap verilerini çıkarmak mümkün mü? Yani adı soyadı ama en önemlisi bilançodaki tutar? Tüm bilgileri çıkarmak mümkün değilse, o zaman ne mümkün?

3) Sevgili programcılar, bu tür çalışmaların yaklaşık maliyetini tahmin edin, aldanmak istemiyorum, yeterli fiyatı anlamak istiyorum.
Teşekkür ederim!

Abone ile ilgili verilerin alınması zararlıdır.

Yine hesabınızda 500 kaldıraçla 50, bir abonenin ise 33 kaldıraçla 5000'i var.

Burada küçük bir hesaplama sorunu var gibi görünüyor. Bu hizmetle ilgili.

Kendi kendine kopyalama hakkında konuşursak, o zaman:

hesabınızda 2000 kaldıraçlı 50 hesabınız var ve bir abonenin 33 kaldıraçlı 5000'i var

Küçük lot ile 3 pozisyon açabileceksiniz ve depozitosu için büyük lotu olan bir abonenin ikincisinden sonra parası kalmayacak çünkü herkes marja gidecek.

---

O kadar basit değil.

 

Tretyakov Rostyslav # :
Это вроде для МТ5С

Kod için teşekkürler, ancak bir nedenden dolayı sizinki de sadece siparişleri iade ediyor (SELLSTOP), nedenini anlayamıyorum, belki sıralama yanlış / (Kodu test cihazında çalıştırıyorum - belki sorun bu?)

 
MixanM # :

Kod için teşekkürler, ancak bir nedenden dolayı sizinki de sadece siparişleri iade ediyor (SELLSTOP), nedenini anlayamıyorum, belki sıralama yanlış / (Kodu test cihazında çalıştırıyorum - belki sorun bu?)

kodum, son kapatılan siparişin türünü döndürür - "0-Al" veya "1-Sat"
 
Tretyakov Rostyslav # :
kodum, son kapatılan siparişin türünü döndürür - "0-Al" veya "1-Sat"

Evet, demek istediğim buydu - yalnızca "satış durdurma" emriyle veri döndürmesi. Bunu sadece görsel doğrulama için sizinkine ekledim:

...

if(t<SiparişKapatZamanı())

{

t=SiparişKapatZamanı(); sonuç=SiparişTürü();

Print("Sipariş İPUCU:", OrderTicket());

}

....