Hatalar, hatalar, sorular - sayfa 1380

 
Sergey Zhukov :
Uygulamayı oluşturdum, ancak üç günden fazla kimse ona bakmadı.
Başvuru numarası nedir?
 
Alexander :
Başvuru numarası nedir?
#11302121 | 2015.09.14 18:17
Sinyaller: İstatistiklerle ilgili sorun
 

Çiftlerin sonsuz teması =)

Geliştiricilerden iki standart işlev eklemelerini istiyorum.

Aşağıdaki özellikleri öneriyorum:

====

Rp

İşlev, enstrümanın fiyat adımına hizalanacak bir değer döndürür.

çift Rp (

   sicim     sembol_adı , // sembol adı
    çift   değer                    // fiyat tesviye edilecek
);

Seçenekler

sembol_adı

[karakterde.

değer

[içinde] Pozitif sayı.

Geri dönüş değeri

İşlem enstrümanının fiyat adımına yuvarlanmış en yakın sayı .

...

Misal:

Giriş değerleri:

sembol_adı=ES-...

değer = 2000.55

çıktı = 2000.50

(ES = 0,25 enstrümanı için fiyat adımı)


Giriş değerleri:

sembol_adı=SPX

değer = 2000.55

çıktı = 2000.63

(SPX enstrümanında, ES'de olduğu gibi fiyat adımı da 0.25'tir, ancak aynı zamanda temel bir kayma vardır ve teklif sadece aşağıdaki kesirli kısımlara sahip olabilir - 13,38,63,88).


Giriş değerleri:

sembol_adı=RTS

değer = 82055,55

çıkışta = 82060

(RTS = 10 cihazı için fiyat adımı)

... Peki, vb.


Beni daha çok ilgilendiren ikinci fonksiyon:

====

karavan

İşlev, cihazın ses düzeyi adımına hizalanacak ve SYMBOL_VOLUME_MIN ile SYMBOL_VOLUME_MAX aralığında olacak bir değer döndürür.

çift Rv (

   sicim     sembol_adı , // sembol adı
    çift   değer                    // tesviye edilecek parti
);

Seçenekler

sembol_adı

[karakterde.

değer

[içinde] Pozitif sayı.

Geri dönüş değeri

İşlem enstrümanının hacim adımına yuvarlanmış en yakın sayı . Sayı SYMBOL_VOLUME_MAX'tan büyük olmayacak ve SYMBOL_VOLUME_MIN'den küçük olmayacaktır.

...

======


Bu fonksiyonlardan beklediğim temel özellik, DÜNYADAKİ TÜM TİCARET ARAÇLARI ve HERHANGİ BİR GİRİŞ DEĞERİ İÇİN geçerli olmalarıdır.

Birinin hazır bir çözümü varsa, geliştiriciler bunu yaparken lütfen paylaşın.

Henüz var olmamaları garip =/

 

Sorunu yorumunuzdan çözerek, en aptal ve en beceriksiz işlevi atladınız, ancak bu bile birçok girdi değerini karıştırıyor.

İşlev kodu:

 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Возвращает кол-во значимых цифр после запятой
 вернёт 0 если число без значимой десятичной дробной части
 вернёт -1 в случае ошибки во время разбора строки на массив
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
int GetDigits( double n)
{
   ushort array[];
   string st=( string )n;                                         // явным образом формируем строку из числа
   int len= StringLen (st);
   if (len< 3 ) return ( 0 );                                         // число не может быть дробным если строка получилась меньше трёх символов
   if ( StringToShortArray (st,array)!=len+ 1 ) return (- 1 );         // разбираем строку на массив символов
   for ( int i= 0 ;i<len;i++) if (array[i]== '.' ) return (len-i- 1 );   // ищем в строке точку и если она есть, возвращаем кол-во символов от точки до конца строки
   return ( 0 );
}

Mesele şu ki, bir kesirli sayının önemli kısmını belirlemenin tüm hemoroidini aptalca, derleyicinin işleci = (string) yerine koyduğu yönteme kaydırdım.

Ancak bu formda kodun , dizgiyi neredeyse printf ()'deki g-type gibi biçimlendirdiği , yani uzun kesirler için dizgenin bilimsel bir biçimde çıktılandığı ortaya çıktı.

Bunu, üstel formatı olmayan ve sağda fazladan sayılar olmayan ve hemoroidsiz =) bir dizeye herhangi bir n çıktısı için nasıl başarırsınız?

Ve başka bir soru: ondalık kesir her zaman bir nokta ile mi yoksa sistem ayarlarından varsayılan olarak ayrı mı virgül veya başka bir şey olabilir mi?

 
Fry :

Sorunu yorumunuzdan çözerek, sizinki en aptal ve en beceriksiz işlevden uzaklaştı, ancak bu bile birçok girdi değeri için berbat.

İşlev kodu:

Mesele şu ki, bir kesirli sayının önemli kısmını belirlemenin tüm zorluğunu aptalca bir şekilde derleyicinin işleci = (string) yerine koyduğu yönteme kaydırdım.

Ancak bu formda kodun , dizgiyi neredeyse printf ()'deki g-type gibi biçimlendirdiği , yani uzun kesirler için dizgenin bilimsel bir biçimde çıktılandığı ortaya çıktı.

Üstel formatı olmayan ve sağda fazladan sayılar olmayan ve hemoroidsiz =) bir dizgenin çıktısını nasıl elde edersiniz?

Ve başka bir soru: ondalık kesir her zaman bir nokta ile mi yoksa sistem ayarlarından varsayılan olarak ayrı mı virgül veya başka bir şey olabilir mi?

Ve Nokta (), Rakamlar düzenlemez mi???
 
Vladimir Pastushak :
Ve Nokta (), Rakamlar düzenlemez mi???

Ayrıca, hacim adımının doğruluğunu döndürecek olan en az DigitsLot() olsun.

Belki de ipucunu yanlış anladım. Aradığınızı Point() veya Digits() yoluyla elde etmenin makul bir yolu var mı?


Yine de, yukarıda tanımladığım bu iki fonksiyon (fiyat ve parti için geçerli seviyeleyiciler) çok gereklidir.

Forex mutfaklarında hacmin en çok 0,01'lik bir adımla kabul edildiğini ve yarın ne olacağı kimsenin umurunda olmadığını anlıyorum, ancak terminal gelişiyor.

Gittikçe daha fazla araç var. Partinin tamsayı adımına izin vermeyen tüm ev yapımı el sanatları artık çalışmıyor. Asgari lot, diyelim ki dörtte bir olmayacağını kim söyledi? Evet, birkaç seçenek.

Bu karar geliştiricilerden veya mutlak (tüm değerler için) olmalıdır, aksi takdirde güvenilemez.


Ve alıntı hakkında. Bir istek gönderdiğinizde, sunucu sadece normalleştirmek (işaretlerle kesmek) için eşit olmayan fiyat değerlerini bile kabul eder, ancak başka görevler de vardır.

Herhangi bir sayıdan herhangi bir enstrüman için gerçekten olası bir fiyat teklifi alabilmenin ve kırpılmamış çöplerden almanın gerekli olduğunu kabul edin.

 
Fry :

Sorunu yorumunuzdan çözerek, en aptal ve en beceriksiz işlevi atladınız, ancak bu bile birçok girdi değerini karıştırıyor.

İşlev kodu:

...
Kendimi düzeltiyorum. Bu işe yarıyor gibi görünüyor:
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Возвращает кол-во значимых цифр после запятой для чисел с точностью до 8 знаков 
   Вернёт 0 если число целое (в пределах 8 знаков после запятой) 
   Вернёт -1 в случае ошибки во время разбора строки на массив
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
int GetDigits( double n)
{
   ushort array[];
   if ( StringToShortArray ( StringFormat ( "%.8f" ,n),array)< 10 ) return (- 1 ); // число в строку и разбираем строку на массив символов
   int r= ArraySize (array)- 2 ;                                           // размер массива минус ноль-терминатор и минус нулевая база указателя 
   for (;r> 0 && array[r]== '0' ;r--);                                     // ищем справа не ноль
   for ( int l= 0 ;l<=r;l++) if (array[l]== '.' ) return (r-l);                 // ищем слева точку и если она есть, возвращаем кол-во символов от точки до не нуля справа
   return ( 0 );
}

Tamamen kötü olduğumu düşünmeyin, tamamen matematiksel bir problem uğruna çok inatla bir sayıdan bir dizi yapıyorum.

İlk başta dürüstçe logaritma üzerinden yapmaya çalıştım ama çok çirkin çıktı =(

 
Fry :
Kendimi düzeltiyorum. Bu işe yarıyor gibi görünüyor:

Tamamen kötü olduğumu düşünmeyin, tamamen matematiksel bir problem uğruna çok inatla bir sayıdan bir dizi yapıyorum.

İlk başta dürüstçe logaritma üzerinden yapmaya çalıştım ama çok çirkin çıktı =(

Her ihtimale karşı bir kez daha soracağım, neden NormalizeDouble() _Point _Digits ??????????

Neden bir bisiklet yapıyorsun?

 
Vladimir Pastushak :

Her ihtimale karşı bir kez daha soracağım, neden NormalizeDouble() _Point _Digits ??????????

Neden bir bisiklet yapıyorsun?

Her ihtimale karşı tekrar cevap vereceğim. Lütfen bana "NormalizeDouble() _Point _Digits" kullanarak SYMBOL_VOLUME_STEP'in kesinliğini nasıl bileceğimi açıklayabilir misiniz?

Veya herhangi bir pozitif sayıdan SYMBOL_VOLUME_STEP'in katları nasıl elde edilir?

Aşağıdaki sonuç nasıl elde edilir:

2000.55 (ES sembolü) -----> 2000.50

2000.55 (sembol SPX) -----> 2000.63

1055.5555 (RTS sembolü) ------> 1060

bugün (ve tercihen yarın) MT5 terminalinde mevcut olan dünyadaki herhangi bir sembol için

"????????"

Geliştiriciler yalnızca 2 işlev ekleyebilir ve terminal geliştikçe bunları iyileştirebilir, ancak farklı ticaret araçlarının tüm özelliklerini bilmiyorum. Hangi alıntıların genel olarak mevcut olduğunu nereden öğrenebilirim? Ve NormalizeDouble() sonucunu değil, tam olarak QUOTE almam gerekiyor.

Bu bisiklet zaten varsa - belirli bir uygulamaya bakın, minnettar olacağım. Kendimde bulduğum şey şimdi bazı karakterlerde çalışmıyor.

 
Fry :

...

2000.55 (ES sembolü) -----> 2000.50

2000.55 (sembol SPX) -----> 2000.63

1055.5555 (RTS sembolü) ------> 1060

...

Lütfen bu üç sembol için SYMBOL_VOLUME_STEP'i gösterin.