fxsaber : MIX'te TickSize 25, Digits 0. 25'in katı olmayan bir tamsayı fiyatının normalleştirilmesi OrderSend hatasına neden olur.
Eh, böyle bir mantıkla ve 0.25'lik bir adım olması durumunda normalleştirme bir hata verecektir. Normalleştirmenin görevi, fiyatı egzotik bir fiyat adımına ayarlamak değil, kayan noktalı bir sayıyı belirli bir kesinliğe yuvarlamaktır . Herhangi bir hataya yol açmaz.
Sergei Vladimirov : Eh, böyle bir mantıkla ve 0.25'lik bir adım olması durumunda normalleştirme bir hata verecektir. Normalleştirmenin görevi, fiyatı egzotik bir fiyat adımına ayarlamak değil, kayan noktalı bir sayıyı belirli bir kesinliğe yuvarlamaktır . Herhangi bir hataya yol açmaz.
Normalleştirme başlangıçta yalnızca biri için tanıtıldı (ve yardımda bahsedildi) - ticaret işlevleri için.
C# gibi diller, numaralandırma adının belirtilmesini gerektirirken, C++ ve dolayısıyla MQL4/5, numaralandırmaları oldukça gevşek bir şekilde ele alır. Her ihtimale karşı, bu saçmalığın tıpkı C++'da olduğu gibi MQL5'te derlendiğini kontrol ettim.
#define ENUM_QQ \
ENUM_QQ_HELPER(el_1, 3 ) \
ENUM_QQ_HELPER(el_2, 9 ) \
ENUM_QQ_HELPER(el_3, 38 ) \
ENUM_QQ_HELPER(el_4, 1 )
enum Enum_qq
{
#define ENUM_QQ_HELPER(el, val) el = val,
ENUM_QQ
#undef ENUM_QQ_HELPER
};
void get_enumqq_array( int &ar[])
{
int temp[] = {
#define ENUM_QQ_HELPER(el, val) el,
ENUM_QQ
#undef ENUM_QQ_HELPER
};
ArrayResize (ar, ArraySize (temp));
for ( int i = 0 ; i < ArraySize (temp); ++i)
ar[i] = temp[i];
}
voidOnStart ()
{
int q[];
get_enumqq_array(q);
for ( int i = 0 ; i < ArraySize (q); ++i)
Alert (q[i]);
}
Şimdi numaralandırmayı düzenlememiz gerekiyorsa, bir kez ve tek bir yerde düzenleme yapıyoruz. Yeni bir eleman eklememiz gerekiyor, örneğin element_new = 56, ekliyoruz
ENUM_QQ_HELPER(element_new , 56 )
Ve get_enumqq_array() işlevini düzenleme konusunda endişelenmeyin. Tekniğin adı X Macro https://en.wikipedia.org/wiki/X_Macro. Geliştiriciler dilerse standart numaralandırmaları benzer şekilde bitirmek kolaydır.
Belki hemen belli değil, numaralandırma şöyle çıktı:
Diyelim ki bir numaralandırmamız var. Sıralı olarak, örneğin bir döngüde, bu numaralandırmanın tüm olası değerleri nasıl alınır?
Onlar. tf1++ sürekli olarak PERIOD_M1 , PERIOD_M2 , PERIOD_M5 döndürmelidir... Bunun dil araçları kullanılarak yapılamayacağını düşünüyorum.
denenmedi, ancak teoride ENUM_MYENUM varsa, o zaman (ENUM_MYEUM)INT_MAX enumdan maksimum değeri vermelidir. Aksi takdirde, bu bir tür döküm hatasıdır. Yalnızca, cast operatörünün (type) bu türden bir değer döndürmesi gerektiği için.
Neden hepsi aniden?
MIX'te TickSize 25, Digits 0. 25'in katı olmayan bir tamsayı fiyatının normalleştirilmesi OrderSend hatasına neden olur.
Sadece bir sonraki şubede bilgisayarı banyoda boğmanızı tavsiye ettim, o zaman her şey daha da gözden düşecek.
MIX'te TickSize 25, Digits 0. 25'in katı olmayan bir tamsayı fiyatının normalleştirilmesi OrderSend hatasına neden olur.
Eh, böyle bir mantıkla ve 0.25'lik bir adım olması durumunda normalleştirme bir hata verecektir. Normalleştirmenin görevi, fiyatı egzotik bir fiyat adımına ayarlamak değil, kayan noktalı bir sayıyı belirli bir kesinliğe yuvarlamaktır . Herhangi bir hataya yol açmaz.
Muhtemelen iki işlevi tanıtmanız gerekir: 1 - numaralandırmadaki öğelerin sayısını döndürür, 2 - öğeyi sayıya göre döndürür ...
Enum'da, örneğin aşağıdaki gibi, öğelere herhangi bir değer atayabilirsiniz. enum bir dizi değil.
C# gibi diller, numaralandırma adının belirtilmesini gerektirirken, C++ ve dolayısıyla MQL4/5, numaralandırmaları oldukça gevşek bir şekilde ele alır. Her ihtimale karşı, bu saçmalığın tıpkı C++'da olduğu gibi MQL5'te derlendiğini kontrol ettim.
Enum'da, örneğin aşağıdaki gibi, öğelere herhangi bir değer atayabilirsiniz. enum bir dizi değil.
Ne olmuş? Bildirim sırasına göre bu öğeleri yinelemekle ilgiliydi.
Programcılara not:
Şimdi numaralandırmayı düzenlememiz gerekiyorsa, bir kez ve tek bir yerde düzenleme yapıyoruz. Yeni bir eleman eklememiz gerekiyor, örneğin element_new = 56, ekliyoruz
ENUM_QQ_HELPER(element_new , 56 )Ve get_enumqq_array() işlevini düzenleme konusunda endişelenmeyin. Tekniğin adı X Macro https://en.wikipedia.org/wiki/X_Macro. Geliştiriciler dilerse standart numaralandırmaları benzer şekilde bitirmek kolaydır.
Belki hemen belli değil, numaralandırma şöyle çıktı:
Diyelim ki bir numaralandırmamız var. Sıralı olarak, örneğin bir döngüde, bu numaralandırmanın tüm olası değerleri nasıl alınır?
Onlar. tf1++ sürekli olarak PERIOD_M1 , PERIOD_M2 , PERIOD_M5 döndürmelidir... Bunun dil araçları kullanılarak yapılamayacağını düşünüyorum.