KimIV'ten faydalı özellikler - sayfa 98

 
Merhaba Igor! 05/09/2008 17:10 sayfa 17 Korelasyon fonksiyonunu tanımladınız. Pearson formülünü kullanarak korelasyon fonksiyonunu tanımlayabilir misiniz?
 

Merhaba Igor!

e-OpenByTime Expert Advisor'ı değiştirebilir veya yeni bir tane yazabilir veya hazır olup olmadığını önerebilir misiniz :)))

Fiyattan N puan ile X zamanında farklı yönlerde mevduat ayarlayan bir danışmana ihtiyacımız var!

 

Merhaba Igor!

Cephaneliğinizde yatay çizgiler çizen bir komut dosyanız var mı - sinyalden X ve Y noktaları aralıklı bölümler?

Açıklayayım: Al / Sat sinyalleri var (hareketlerin kesişmesi, fraktal vb.).

Komut dosyasında 4 parametre ayarlanır, örneğin:

- Durdurmak için 300 pip,

- Teik'e 500 puan,

- 10 bar = segmentlerin uzunluğu,

- sinyaller nereden ve nasıl alınır - sinyal türkiye'ye bir bağlantı, sinyaller için koşulların eklenmesi... Bu noktayı düşünmeniz gerekiyor!

Her Bai sinyalindeki komut dosyası 2 satır çizer:

1) birinci ("durdur"), sinyal çubuğunun açılış fiyatından 300 puan daha düşüktür;

2) ikinci ("al") sinyal çubuğunun açılış fiyatından 500 puan daha yüksektir;

3) çizgiler sinyal çubuğunda başlar ve 10. çubukta biter.

Sel sinyallerinde - aynı şey, yalnızca satırların girintileri tersine çevrilir.

Bana öyle geliyor ki, böyle bir görselleştirme "sinyal al-dur"un ön değerlendirmesi için faydalı olacaktır.

Saygılarımla, Vadim.

 

Merhaba Igor!

Soru 1.

OpenPosition() işlevinizde hata 138 - ERR_REQUOTE duraklatılıyor:

if (hata!=135) Uyku(1000*7.7);

belgeler verileri güncellemeyi ve hemen tekrar denemeyi önermesine rağmen (ve fiyat düşüyor, ancak mümkün olan en kısa sürede bir pozisyon açmak istiyorum))).

O zaman bu doğru olabilir:

if (err!=135 && err!=138) Uyku(1000*7.7);?

Yoksa bir şey anlamıyor muyum?

Soru 2.

DC (Alpari) 5 ondalık basamak verirse , OrderSend() işlevinde 5 noktaya eşit Slippage parametresinin nasıl doğru bir şekilde belirtileceğini söyle pliz.

- "elli"?

- yoksa hala "5" mi?

 
slavamir писал(а) >>

Soru 1.

OpenPosition() işlevinizde hata 138 - ERR_REQUOTE duraklatılıyor:

if (hata!=135) Uyku(1000*7.7);

belgeler verileri güncellemeyi ve hemen tekrar denemeyi önermesine rağmen (ve fiyat düşüyor, ancak mümkün olan en kısa sürede bir pozisyon açmak istiyorum))).

O zaman bu doğru olabilir:

if (err!=135 && err!=138) Uyku(1000*7.7);?

Evet iyi! Bunu böyle yapabilirsiniz ... Teşekkürler!

slavamir yazdı >>

Soru 2.

DC (Alpari) 5 ondalık basamak veriyorsa, OrderSend() işlevinde 5 noktaya eşit Slippage parametresinin nasıl doğru bir şekilde belirtileceğini söyle pliz.

- "elli"?

- yoksa hala "5" mi?

5
 

Merhaba Igor,

GetProfitFromDateInCurrency() işlevinizi geliştirmeme yardım eder misiniz? Sadece kapalı emirlerin bile karını hesaplaması gerekir. Mevcut siparişin geri kalanını kapatmak için siparişlerin kısmi kapanmasını (bölme) ve CloseBy işlevini kullanıyorum. Siparişlerin çift mi yoksa tek sayıda mı kapatıldığını belirlemek için aşağıdaki formülü kullanın:

çift x, y; --------------------------------- Farz etmek
x=MathFloor(OrderLots()/0.02); --------- a. lotlar 0.04/0.02=2 ise --- b. lotlar 0.03/0.02=1 ise
y=x*0.02; ---------- a. 2*0.02=0.04 --- b. 1*0.02=0.02
if (y==OrderLots()) ---------- a. 0.04==0.04 --- b. 0.02!=0.04
Xlots=y; Eşitse, XLots y değerini alır

İşe yarıyor (Çift/tek olarak ayırmanın daha iyi bir yolunu düşünmedim ve sorduğumda herhangi bir ipucu alamadım).

Ayrıca, aslında bir işlev çağrısı (senden yaptığım)
ClOrdProf=GetProfitFromDateInCurrency("", -1, -1, XTime, XLots);

Ve benim işlevinize, partilerin eşit olması durumunda kârın hesaplanması gerektiği koşulunu eklemeye yönelik beyhude girişimim:

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0 , double lt=-1 )
{
çift p=0;
int i, k=OrdersHistoryTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==dk) {
if (dt<SiparişKapatTime()) {
if (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
}
}
dönüş(p);
}

Saymak istemiyor.
1. Fonksiyonda bir yerde yanlış mıyım?
2. Siparişler OrdCloseBy tarafından kapatılabilir mi?

 
GetProfitFromDateInCurrency() işlevinde int lt parametresini kullanalım üç bayrak değeri alır
-1 tüm siparişler, 0 - çift lotlar, 1 - tek lotlar, sonra
yer değiştirmek
if (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}

üzerinde

if (lt == -1){
p+=OrderProfit()+OrderCommission()+OrderSwap();
} başka {
int testi = OrderLors() * 100;
if (lt == test % 2) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
} başka {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
 
keekkenen писал(а) >>
GetProfitFromDateInCurrency() işlevinde int lt parametresini kullanalım üç bayrak değeri alır


Teşekkür ederim, modülo bölme ile parti belirleme yönteminiz çok doğru, biraz sonra alacağım... Ama ilginçmiş ki, değiştirdiğim fonksiyonun çalıştığı ortaya çıktı... bir anlamda. "p+=" değişiklikleri görmek için bir Uyarı ekledim ve doğru sayılıyor. Ancak bilgi alınması gereken ClOrdProf değeri güncellenmez: Alert ("ClOrdProf= ",ClOrdProf);. Kodda şöyle görünür:
int başlangıç()
{
................................
bool
ClOrdProf=yanlış; // boole
................................
ClOrdProf=GetProfitFromDateInCurrency("",-1,-1,XTime,XLots); //fonksiyon çağrısı
if (ClOrdProf==doğru)
Alert("ClOrdProf= ",ClOrdProf); - günlükte güncellenmedi
................................
dönüş; // başlangıçtan çık()
}
// Kapanan siparişlerin karını hesaplama işlevi
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, tarihsaat dt=0, double lt=-1)
{
çift p=0;
int i, k=OrdersHistoryTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==dk) {
if (dt<SiparişKapatTime()) {
if (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
Uyarı("p= ", p); - dergide güncellendi
}
}
}
}
}
}
}
dönüş(p);
}
Hayatım boyunca, neler olduğunu anlamıyorum...

 

Komik, değil mi, komik ... ve sana ve hatta bana bile komik ... (Vladimir Semenovich)
Başlangıçta, ClOrdProf bool değil, double'dır. Ve "if (ClOrdProf>0 || ClOrdProf<0 )" olmalıdır - negatif kar durumunda hesaplama için "veya" ile başlayan ikinci kısım... "bulanık görünüm" dediğim şey - ben yapmadım yüzeyde yatanı hemen görün.
Çift/tek lotları hesaplama kılavuzu için keekkenen'e teşekkürler.
İşlevini yükseltme fırsatı için Igor'a teşekkürler.

 
KimIV >> :

TicketNearPos() işlevi.

Bu fonksiyon, piyasaya en yakın pozisyonun biletini döndürür. Pozisyon "yakınlık" kriteri, pozisyon açılış fiyatı ile mevcut piyasa fiyatı arasındaki puan cinsinden minimum mesafedir. Dikkate alınacak pozisyonların seçimi harici parametreler tarafından belirlenir:

  • sy - Piyasa aracının adı. Bu parametreyi ayarlarsanız, işlev yalnızca belirtilen takımın konumlarını dikkate alacaktır. Varsayılan değer "" herhangi bir piyasa aracı anlamına gelir. NULL değeri, geçerli enstrüman anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği, MagicNumber. Varsayılan değer -1 , herhangi bir tanımlayıcı anlamına gelir.
not. Ekli, TicketNearPos() işlevini test etmek için bir komut dosyasıdır.
 if (pp == 0 ) 
{ return (ti);}
TypeNearPos işlevinde, koşul karşılandığında bir sıkışma fark ettim:
piyasa fiyatı = emir açılış fiyatı, bu emir fonksiyon tarafından dikkate alınmaz.
Bu basit koşulu koda eklemek zorunda kaldım.
Bu koşul, TypeNearPos() ve PriceOpenNearPos() benzer işlevlerde de yardımcı olacaktır.
Neden: