Hatalar, hatalar, sorular - sayfa 33

 
Urain :

Değerlendirilmeye değer bir teklif

Tabii ki, sıradan mantık açısından, bu, sol kulağı sağ elle kaşımak gibidir (ama bu artık sizin için değil, geliştiriciler için),

o zaman neden yerel olmayan bir enstrümanın verilerini arama olasılığı?

Yine de özel göstergeler oluşturmanız ve bunları doğru araçtan çağırmanız gerekiyorsa, genel olarak sonuç şudur: Bir şapka alacağım.

Böyle bir çağrı olasılığı gerekli ve basitçe gereklidir, sadece geliştiricilerin hindi yazarken böyle bir yaklaşımı hayal etmemiş olmalarıdır.

Aracı özel türkiye parametrelerinde belirtmekten bahsediyorum (ve onların görüşüne göre olması gerektiği gibi iCustom () parametrelerinde değil).


not

iCustom() ile çalışırken öncelik, görünüşe göre başlangıçta mekanik ticarete verildi, bu aslında EA'da belirli noktaların dikkate alınacağını ve belirli eylemlerin gerçekleştirileceğini ve ancak bundan sonra özel için iCustom() çağrılacağını varsayar. hindi.

Aksi takdirde, tüm iş ve sorumluluk, türkiye kodunu uygulayan programcıya aittir (bu, ölümcül hatalara ve sonuçlara yol açabilir, çünkü aşırı hindi hilesi sistemin bir bütün olarak yavaşlamasına veya çökmesine neden olabilir).

 
Urain :

Değerlendirilmeye değer bir teklif

Yine de, yine de, JPY verileriyle EUR üzerinde hazır bir gösterge arayacağım (örneğin, yen için yeterli tarih yok)

ama bu uzunluk için veri yok ve bana ne söyleyecek ??? aynı şarkı.

"Native" enstrüman için hataları ve darboğazları işlemek çok daha kolay olup, veri talep eden uzman veya türkiye'yi aramadan önce ve sonra ön kontrol ve son kontrol yapıyoruz.

Sanırım ikinci bir yol daha var, benim bakış açıma göre, temelde doğru değil. Mantığına göre türkiyede bir veya birden fazla fonksiyon (hesap makinesinden çağrılır) oluşturup, içinde ihtiyacınız olan her şeyi hesaplayıp sonucu hesap makinesine döndürmek gerekir.

not

Ama olay şu - Herhangi bir enstrümandaki çubukların sayısını hesaplayabilirsiniz. Peki ya diğer şeyler?

 
Prival :

Böcek. Tanım. ATS her zaman piyasadadır (çift lot 0.2 ile tersine çevirme)

Tüm onayları test modu. Herşey yolunda.

test modu, açılış fiyatlarında. aynı parça.

Nedense 2 işleme ayrılmıştır. belki sadece öyle görünüyor, ama doğru değil. böyle olmamalı.

Kapatma komutları ile pozisyon açma komutlarını yeniden düzenleyin. bu sırayla olmalı

- pozisyonları kapat

- pozisyonları değiştir

- Açık pozisyonlar

Sonra aynı barda kapatıp açacaksınız.

 
gpwr :

Kapatma komutları ile pozisyon açma komutlarını yeniden düzenleyin. bu sırayla olmalı

- pozisyonları kapat

- pozisyonları değiştir

- Açık pozisyonlar

Sonra aynı barda kapatıp açacaksınız.

Yakın bir komutum yok. sadece açılış. Piyasada 0.1'lik bir alım varsa, o zaman 0.2'lik bir satış açarım. bu işlemin sonucu olarak, terminalin 0.1 hücresine sahip olması gerekir, üstelik iki değil tek işlemde.

Sanırım geliştiriciler neden bahsettiğimi anladı.

 

bu kodu yazdım

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1   "I1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1   1
//--- plot Label2
#property indicator_label2   "I2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_style2  STYLE_SOLID
#property indicator_width2   1
//--- indicator buffers
double          I1Buffer[];
double          I2Buffer[];
int OnInit ()
  {
   SetIndexBuffer ( 0 ,I1Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,I2Buffer, INDICATOR_DATA );
   return ( 0 );
  }

int OnCalculate ( const int rates_total,       // размер массива price[]
                 const int prev_calculated,   // обработано баров на предыдущем вызове
                 const int begin,             // откуда начинаются значимые данные
                 const double & price[])       // массив для расчета
  {
   string Symbol_1= "EURUSD" ,Symbol_2= "GBPUSD" ;
   if (rates_total< 1 ) return ( 0 );
   double Arr1[],Arr2[];
   int end,rez0,rez1;
   end= MathMin (( int ) SeriesInfoInteger (Symbol_1, 0 , SERIES_BARS_COUNT )- 1 ,( int ) SeriesInfoInteger (Symbol_2, 0 , SERIES_BARS_COUNT )- 1 );
   end= MathMin (end,rates_total-prev_calculated+ 1 );
   rez0= CopyClose (Symbol_1, PERIOD_CURRENT , 0 ,end, Arr1);
   if (rez0==- 1 ){ Print ( "Ошибка копирования " ,Symbol_1, " " , GetLastError ()); return ( 0 );}
   rez1= CopyClose (Symbol_2, PERIOD_CURRENT , 0 ,end, Arr2);
   if (rez1==- 1 ){ Print ( "Ошибка копирования " ,Symbol_2, " " , GetLastError ()); return ( 0 );}
   if (rez1!=rez0){ Print ( "Ошибка Синхронизации" ); return ( 0 );}
  
   ArraySetAsSeries (Arr1,true);
   ArraySetAsSeries (Arr2,true);
     
   int li=rates_total- 1 ;  
   for ( int i= 0 ;i<end;i++)
     {      
      I1Buffer[li]=Arr1[i]+ 0.26 ;
      I2Buffer[li]=Arr2[i];
      li--;
     }
   return (rates_total);
  }

İyi çalışıyor gibi görünüyor, ancak gerekli olan her şeyi dikkate alıp almadığını bilmiyorum.
Doğruysa, işte seçeneğiniz.
Doğru değilse lütfen düzeltin.

 

Ve burada bir sorum var.

Göstergeyi EA'dan çağırırken neden değer göstergeyle eşleşmiyor.

Yani, bir hindide 1.5123 ve danışman 1.5117 alıyor

İşte danışmanın kodu, ek olarak ekte çoğaltılmıştır.

 static int Handle;
int bars;
void OnInit ()
  {
   Handle= iCustom ( NULL , 0 , "proverka" );
  }

void OnTick ()
  {
   if (bars== Bars ( _Symbol , _Period )) return ;
   bars= Bars ( _Symbol , _Period );
   double buf1[],buf2[];    
   if ( CopyBuffer (Handle, 0 , 0 , 2 ,buf1)< 0 || CopyBuffer (Handle, 1 , 0 , 2 ,buf2)< 0 ) Alert ( "Ошибка копирования значений индикаторных буферов " , GetLastError (), "!!" );
   Print ( "Время " + TimeToString ( TimeCurrent (),TIME_DATE|TIME_MINUTES), "   буф1-" ,buf1[ 0 ], "   буф2-" ,buf2[ 0 ]);
  }

ve resim

Ayrıca, aracın başlatıldığı ilk arabellek aynıdır.

Dosyalar:
prover.mq5  1 kb
proverka.mq5  2 kb
 
ddd06 :

Ve burada bir sorum var.

Göstergeyi EA'dan çağırırken neden değer göstergeyle eşleşmiyor.

Yani, bir hindide 1.5123 ve danışman 1.5117 alıyor

İşte danışmanın kodu, ek olarak ekte çoğaltılmıştır.

Ve göstergenin önceki değerine bakarsınız. Bunun sadece 1.5117 olduğundan şüpheleniyorum. Dizin 1'deki geçerli (son) değeri alın. Veya SetAsSeries(bufX,true) dizilerini atayın.
 
stringo :
Ve göstergenin önceki değerine bakarsınız.
1.512380 - mevcut 1.512310 - önceki
 
ddd06 :

bu kodu yazdım

İyi çalışıyor gibi görünüyor, ancak gerekli olan her şeyi dikkate alıp almadığını bilmiyorum.
Doğruysa, işte seçeneğiniz.
Doğru değilse lütfen düzeltin.

Evet doğru, revize edilmiş versiyonumda dizinin uzunluğu için de bir kontrol var ama her zamanki gibi dizinin yönlerinde kayboldum,

ve çizimin devam ettiği ortaya çıktı, ancak dizinin uzunluğu çizelgenin uzunluğundan daha az olduğu için çizim uçtan ortaya (ya da öylesine) gitti,

Burada da render olmadığı izlenimi yaratıldı.

PS Genel olarak, bu yerde uzun süre karışıklık olacağından şüpheleniyorum,

çünkü mql4.com ziyaretçileri de aynı sorunu yaşadı ve şimdi buraya yükleniyor.

 
Urain :

Evet bu doğru

Harika. Bence basit ve özlü bir kod olduğu ortaya çıktı, bu yüzden onu temel olarak kullanabilirsiniz.

Danışmanın pahasına, soru şudur - Servis Masasına yazmam gerekir mi?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.