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

 
DanilaMactep :

Kodu önerildiği gibi yaptım. İlk olarak, koda göre, durma türünü seçmek için bir şartım var - atr veya sabit

Sonra normalleştirmemi yorumladım ve bu şekilde atadım.

Kodun devamında, bir kar hesaplamam var - orada sorun yoktu ve karı hesapladıktan sonra tavsiye edilen korkunç bir formül ekledim

Her şey hatasız derlendi. Ve test başlatıldığında, anladığım kadarıyla sıfıra bölmenin gerçekleştiği günlükte bir hata oluşuyor ve test duruyor. Nerede hata yaptım veya neyi doğru yapmadım?


sadece sil

     sl = fabs (OrderOpenPrice()-OrderStopLoss())/ _Point ; // ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ
     //sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО  ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ
 
DanilaMactep :

Kodu önerildiği gibi yaptım. İlk olarak, koda göre, durma türünü seçmek için bir şartım var - atr veya sabit

Sonra normalleştirmemi yorumladım ve bu şekilde atadım.

Kodun devamında, bir kar hesaplamam var - orada sorun yoktu ve karı hesapladıktan sonra tavsiye edilen korkunç bir formül ekledim

Her şey hatasız derlendi. Ve test başlatıldığında, anladığım kadarıyla sıfıra bölmenin gerçekleştiği günlükte bir hata oluşuyor ve test duruyor. Nerede hata yaptım veya neyi doğru yapmadım?


Sadece iki farklı seçenek sunulduğunda, ikisini birden uygulamanıza gerek yoktur.

sl'yi iki farklı seçenek olarak görüyorsunuz

sl= iATR ( NULL ,PeriodForWork_sl,atr_sl_period, 1 ); // ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА

veya

sl= razmer_fikc_sl* Point ; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ

fiyat değerlerinde değer elde edin. Ve ... ile ... arasındaki noktalar formüle eklenmelidir.

Durdurmanın fiyata uzak olduğu ortaya çıktı, ya iATR(………)/_Point ya da size_fikc_sl ama fonksiyonda iki farklı değer kullanmak çok uygun değil, bu yüzden tek seçenek bırakmak daha iyi

 double lot = MathFloor ((Free*MaxRisk/ 100 )/(sl/ Point *LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА

ve parti büyüklüğünü hesaplamaya çalışmadan ÖNCE sl'nin hesaplanması gerektiğini unutmayın.

 
sl= iATR ( NULL ,PeriodForWork_sl,atr_sl_period, 1 ) / Point ; // ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
mutlaka
 

Bu şekilde yap...

 void OnTick ()
  {
//---
if (tip_sl==en_po_atr)
     { //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     sl= iATR ( NULL ,PeriodForWork_sl,atr_sl_period, 1 )/ Point ; // ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
       Print ( "СТОП ПО АТР, ЕГО РАЗМЕР " +sl);
     }
     else //ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
     sl= razmer_fikc_sl; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
       Print ( "СТОП ПО АТР, ЕГО РАЗМЕР " +sl);
     }
double lot = MathFloor ((Free*MaxRisk/ 100 )/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
 
MakarFX :

sadece sil

Satırı yorumladım ve test başladı - ÇOK TEŞEKKÜR EDERİZ! iATR'den bir stop loss değişkeni alırken neden sonunda bir noktaya bölündüğünü anlamadım? P/S Gerçekten matematikle ilgili güçlüklerim var - dalga geçmiyorum :-( Ama bence test gittiğinden ve 100 lotluk bir depoyla, minimum lot ayarlandığından ve 10.000'lik bir depoyla her zaman farklıdır , yani norm işe yarıyor O_o Yardımınız için tekrar teşekkürler .. .

 
DanilaMactep :

Satırı yorumladım ve test başladı - ÇOK TEŞEKKÜR EDERİZ! iATR'den bir stop loss değişkeni alırken neden sonunda bir noktaya bölündüğünü anlamadım? P/S Gerçekten matematikle ilgili güçlüklerim var - dalga geçmiyorum :-( Ama bence test gittiğinden ve 100 lotluk bir depoyla, minimum lot ayarlandığından ve 10.000'lik bir depoyla her zaman farklıdır , yani norm işe yarıyor O_o Yardımınız için tekrar teşekkürler .. .

ATR, 0.00120 gibi bir ondalık sayı verir

size_fikc_sl bir tam sayınız var

lotu hesaplamak için puana ihtiyacınız var, yani. tüm sayılar

ATR/Point bir tamsayı üretir

 
Eski konu, ama bir çözüm bulamıyorum. Bir zaman aralığı nasıl belirlenir (örneğin, 12:00 ile 14:00 arası) ve bu aralıkta yalnızca bir kez, bazı koşulları karşılayan bir sipariş açın (örneğin, RSI<30).

Veya

Uykuya benzer bir şey: belirli bir koşula göre bir sipariş açın ve 2 saat boyunca hiçbir şey yapmayın. Ancak Uyku, test cihazında çalışmıyor .
 
Порт-моне тв :
Eski konu, ama bir çözüm bulamıyorum. Bir zaman aralığı nasıl belirlenir (örneğin, 12:00 ile 14:00 arası) ve bu aralıkta yalnızca bir kez, bazı koşulları karşılayan bir sipariş açın (örneğin, RSI<30).

Veya

Uykuya benzer bir şey: belirli bir koşula göre bir sipariş açın ve 2 saat boyunca hiçbir şey yapmayın. Ancak Uyku, test cihazında çalışmıyor .

ilk koşul - zaman geldi
ikinci koşul - rsi
üçüncü koşul - zaman aralıklarında böyle bir emir açmanın bedelinde tarihte böyle bir emir yok

 

Tünaydın.

Elliott Wave Osilatör göstergesi vardır, EWO değişkeninin sayısal değerlerini verir. Sıfırın üzerinde olan pozitif EWO'lar ve sıfırın altında olan negatif EWO'lar vardır.

Son 100 EWO okumasından, pozitif EWO'ların ortalamasını ve ayrıca negatif EWO'ların ortalamasını hesaplayın

İndikatörden değerleri şu şekilde alıyorum double EWO=iCustom(Symbol(),0,"Elliott Wave Oscillator",0,0);

Söyle bana, bunu bir danışmanda uygulamak için hangi mql4 kodu kullanılabilir?


Ortalama modulo bulmak mümkündü.

çift kullanılabilirlik_EWO = 0;
for(int g=0;g<100;g++)
avarage_EWO = ortalama_EWO + MathAbs ( iCustom(Symbol(),0,"Elliott Dalga Osilatörü",0,g) ); // modulo ortalaması
kullanılabilirlik_EWO = kullanılabilirlik_EWO/100;


Ancak ortalama pozitif ve ortalama negatif EWO'yu ayrı ayrı nasıl hesaplayacağınız aşağıda açıklanmıştır?

Sayesinde !



 

Kâr Al tetiklemesinin bir sonucu olarak verildi

ORDER _REASON_TP'nin nasıl ve neden olduğunu anlayamıyorum,

DEAL _REASON_TP'nin nasıl çalıştığına dair bir fikrim var, ancak burada siparişlerin ne olduğu net değil