Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 207

 

Merhaba. Yardıma ihtiyacım var.

Baykuşumda, MaxOrders parametresi tarafından belirtilen miktarda bir dizi emir açar, aşağıda örnek olarak nasıl göründüğünü belirttim, kesinlikle kura ile yargılamayın

1-sipariş-lot=128

2-sipariş-lot=256

3-sipariş-lot=512

4-sipariş-lot=1024

5-sipariş-lot=2048

Bunların hepsi testçi için.

MaxOrders = 5 ve açık 5 sipariş var. Ancak sorun şu ki, komisyoncu test cihazında 1000 lot için limit sırasıyla 4 ve 5'tir, sipariş olması gerektiği gibi açılmayacaktır.

Fxt dosyasındaki test cihazında bu parametreyi nasıl değiştireceğimi internette araştırdım, tam olarak nasıl yapacağımı bulamadım.

Bu nedenle, bu sorunu çözmek için programlamayı kullanmaya karar verdim. Ve 4 sipariş için birkaç sipariş açın, iki çıkıyor

4-sipariş-lot=1000

4-sipariş-lot=24

sipariş 5 için 3:

5-sipariş-lot=1000

5-sipariş-lot=1000

5-sipariş-lot=48

ama iki sorun var

- MM'nin maksimum lota göre lotlara bölünmesi için doğru şekilde nasıl bölüneceği

- ve ek siparişlerin nasıl açılacağı ancak siparişi bozmamak için yani MaxOrders'tan daha fazla sipariş olacak, ancak hacme uymak için açılan ek siparişleri saymayın.

 
solnce600 :

Alexey İyi günler!

İletişimimiz aklımdan çıkmıyor ...... ve işte nedeni ......

Kodlamamla ilgili olarak, mantık eksikliği hakkında sık sık yorumlar duydum.

Dün bana Boole cebri ile ne demek istediğini açıklamıştın.Bu konu çok geniş ve çok derin.

Gerçek şu ki, matematiksel ve hatta cebirsel bir zihniyete sahip değilim.

Çok karmaşık olmayan bazı matematiksel şeyleri anlıyorum .... ama hemen değil ve beynim karmaşık şeyleri hiç algılamıyor.

Yarım yıldan daha uzun bir süre önce, makine öğrenimi programlama eğitimini incelemeye başlamadan önce, şüpheyle işkence gördüm:

Matematiksel yeteneklerim olmadan anlayabilir miyim?

Ancak Bay Kozlov, ders kitabının önsözünde, aslında her şeyin ilk bakışta göründüğünden çok daha basit olduğunu söyledi.

görme.

Ve gerçekten de, ders kitabının %60-70'ini bana öyle geliyor ki, şimdi anlayabiliyorum (belki ilk defa değil) ve sonuç olarak zaten bir şeyler kodlayabiliyorum.

Düne kadar, tüm karmaşık matematiksel hesaplamaların (anlayamadığım) program tarafından yapıldığını ve sadece kurallarını bilmem gerektiğini düşündüm.

hangi program çalışır ve hesaplamalar yapar.

Ama dünkü iletişimimiz beni Boole cebrinde ustalaşmazsam kodlarımda mantık olmayacağı fikrine götürdü.

Kodlarımda boole mantığı eksikse programlarım düzgün çalışmayacak veya hiç çalışmayacaktır.

Ama dün Wikipedia'ya baktım ve fark ettim - Boole cebri ve muhtemelen mantık - aklım için değil!

Dün, kodumun bir parçasına üstünkörü bir bakış attıktan sonra, içinde hiçbir boole mantığı olmadığı sonucuna vardınız.

Sakıncası yoksa, bu parçadaki mantık eksikliğine ilişkin sonucunuzdan önce gelen akıl yürütmenizin gidişatını belirtemezsiniz.

Seni anlarsam, devam edeceğim. Eğer - anlamıyorum ..... Muhtemelen programlamanın yeteneklerimi fazlasıyla aşan bir şey olduğu sonucuna varacağım.

Teşekkür ederim.

eğer (ot==0)
if (Teklif==Fiyat)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Nokta))
if(((Yüksek[1]-Açık[1])>40*Puan)&&((Yüksek[1]-Açık[1])<60*Puan))
if(((Kapat[1]-Düşük[1])>40*Puan)&&((Kapat[1]-Düşük[1])<60*Puan))

Andrey, her şey o kadar trajik değil! Sadece anladığınızı kullanın! Diğer her şey zamanı gelince gelecek!

Örneğin, Kim'in durarak kapatma fonksiyonunu kontrol ettikten sonra, ek bir Lot değişkeni girin ve ikiye katlanmış bir lot ile yeni bir pozisyon açmadan önce şu satırı yazın: Lot = Lot*2.0; ve bu kadar! Ve ikiye katlamaya gerek olmayan normal bir Lot bahsine girersiniz!

Basit şeyler için neden karmaşık kodlara ihtiyacımız var? Bilim adına ve kimsenin anlamaması için mi? "İntihal"e karşı bir tür koruma!

 
borilunad :

Andrey, her şey o kadar trajik değil! Sadece anladığınızı kullanın! Diğer her şey zamanı gelince gelecek!

Örneğin, Kim'in durarak kapatma fonksiyonunu kontrol ettikten sonra, ek bir Lot değişkeni girin ve ikiye katlanmış bir lot ile yeni bir pozisyon açmadan önce şu satırı yazın: Lot = Lot*2.0; ve bu kadar! Ve ikiye katlamaya gerek olmayan normal bir Lot bahsine girersiniz!

Basit şeyler için neden karmaşık kodlara ihtiyacımız var? Bilim adına ve kimsenin anlamaması için mi? "İntihal"e karşı bir tür koruma!

Boris! Desteğin için teşekkürler. Beni biraz sakinleştirdin....

Ama yine de, kodlarımdaki mantık eksikliğiyle ilgili tekrarlanan açıklamalar beni rahatsız ediyor.

Ve beni en çok kızdıran şey, bunun tam olarak neyle ilgili olduğunu anlayamamam.

Bana öyle geliyor ki kodda boole mantığının olmaması önemli.

Onun olup olmadığını nasıl öğrenebilirim?

Burada Alexey, bu pasajda olmadığını ve gerçek hayatta bu parça nedeniyle sorun yaşayabileceğimi söyledi (test cihazında her şey yolunda olmasına rağmen)

eğer (ot==0)

if (Teklif==Fiyat)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Nokta))
if(((Yüksek[1]-Açık[1])>40*Nokta)&&((Yüksek[1]-Açık[1])<60*Puan))

if(((Kapat[1]-Düşük[1])>40*Puan)&&((Kapat[1]-Düşük[1])<60*Puan))

Bir kodlama hatası olması durumunda, her şey açıktır - ya MetaEditor ister ya da Terminaldeki Günlük.

Ve eğer mantığım yoksa ....... bunu nasıl öğrenebilirim Sadece daha deneyimli yoldaşların isteği üzerine.

Ancak, yönlendirmelerinden sonra bile, ÖZEL OLARAK neden bahsettiklerini anlamıyorum.

Boole cebrini öğrenmek benim için gerçekçi değil.

 

Evet, bu boole cebrine çekiçle vurun ve daha fazlasını hatırlamıyorum.

Şaka:

Bir psikiyatri profesörü akıl hastası için bir hastaneyi ziyaret etti ve başhekime bir hastanın iyileşip iyileşmediğini veya hala hasta olup olmadığını nasıl belirlediklerini sordu.

- Küveti suyla dolduruyoruz, kenarına kaşıkla bir çay bardağı koyuyoruz ve hastaya suyu çıkarmasını sunuyoruz.

- Muhtemelen, hasta sağlıklıysa kaşık değil bardak alır mı?

- Hasta sağlıklıysa banyodaki mantarı çıkarır.

* * *

Kodda yapmaya çalıştığınız eylemlerin makul olup olmadığı sorusuna kendiniz cevap verebilmelisiniz ve bu o kadar da zor bir soru değil.

Open[1]-Close[1] negatif olabilir. Bir türevde Kapat>Aç olduğunda bir vaka için, bir vaka için Kapat<Aç - diğer değişken için. Veya gövdenin boyutunu, mumun yönüne bağlı olmayacak şekilde hesaplayın.

 
solnce600 :

Boris! Desteğin için teşekkürler. Beni biraz sakinleştirdin....

Ama yine de, kodlarımdaki mantık eksikliğiyle ilgili tekrarlanan açıklamalar beni rahatsız ediyor.

Ve beni en çok kızdıran şey, bunun tam olarak neyle ilgili olduğunu anlayamamam.

Bana öyle geliyor ki kodda boole mantığının olmaması önemli.

Onun olup olmadığını nasıl öğrenebilirim?

Burada Alexey, bu pasajda olmadığını ve gerçek hayatta bu parça nedeniyle sorun yaşayabileceğimi söyledi (test cihazında her şey yolunda olmasına rağmen)

eğer (ot==0)

if (Teklif==Fiyat)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((Yüksek[1]-Açık[1])>40*Puan)&&((Yüksek[1]-Açık[1])<60*Puan))

if(((Kapat[1]-Düşük[1])>40*Puan)&&((Kapat[1]-Düşük[1])<60*Puan))

Bir kodlama hatası olması durumunda, her şey açıktır - ya MetaEditor ister ya da Terminaldeki Günlük.

Ve eğer mantığım yoksa ....... bunu nasıl öğrenebilirim Sadece daha deneyimli yoldaşların isteği üzerine.

Ancak, yönlendirmelerinden sonra bile, ÖZEL OLARAK neden bahsettiklerini anlamıyorum.

Boole cebrini öğrenmek benim için gerçekçi değil.

"Şeytan boyandığı kadar korkunç değil!" İlk önce kodunuzu okunabilir hale getireceğim, fazladan parantezleri ve gereksiz koşulları kaldıracağım ve sonra bana bu koşullara neden ihtiyacınız olduğunu söyleyeceksiniz!

 if (ot== 0 )                    //если Buy, значит эти условия для закрытия или модификации?!

if (Bid==Price)               //это не будет работать на Реале! 
                               //Надо так: (Bid>=Price) или (Bid<=Price) в зависимости от направления
if (Open[ 1 ]-Close[ 1 ]> 100 * Point & & Open[1]-Close[1]<120*Point)
if (High[ 1 ]-Open[ 1 ]> 40 * Point   && High[1]-Open[1]<60*Point)  

if (Close[ 1 ]-Low[ 1 ]> 40 * Point   && Close[1]-Low[1])<60*Point) 

 
borilunad :

"Şeytan boyandığı kadar korkunç değil!" İlk önce kodunuzu okunabilir hale getireceğim, fazladan parantezleri ve gereksiz koşulları kaldıracağım ve sonra bana bu koşullara neden ihtiyacınız olduğunu söyleyeceksiniz!

Neden bu ekstra koşullara ihtiyacım var diyorum.

Programın mumun belirli parametrelerini 1 puanlık bir boşlukla hesapladığı fırına gönderdiğiniz koşullara ihtiyacım var.

Diğer bir deyişle, belirli bir gövde boyutuna sahip, açılış fiyatı ile yüksek arasında belirli bir boyuta sahip, düşük ve kapanış fiyatı arasındaki mesafenin belirli bir boyutuna sahip bir düşüş mumu.

Anlıyorum bu amaçlar için yanılmıyorsam NormalizeDouble (MathAbs()) da kullanabilirsiniz.Ancak bu seçeneğin kullandığım seçenekle arasındaki farkı önemsemedim.

 
solnce600 :

Neden bu ekstra koşullara ihtiyacım var diyorum.

Programın mumun belirli parametrelerini hesapladığı fırına gönderdiğiniz koşullara ihtiyacım var +, - 1 puan.

Yani, belirli bir gövde boyutuna sahip, açılış fiyatı ile yüksek arasında belirli bir boyuta sahip, düşük ve kapanış fiyatı arasındaki mesafenin belirli bir boyutuna sahip bir düşüş mumu.

Anlıyorum bu amaçlar için yanılmıyorsam NormalizeDouble (MathAbs()) da kullanabilirsiniz.Ancak bu seçeneğin kullandığım seçenekle arasındaki farkı önemsemedim.

Sonra yukarıya bakın, düzeltildi!
 
Integer :

Evet, bu boole cebrine çekiçle vurun ve daha fazlasını hatırlamıyorum.

Şaka:

Bir psikiyatri profesörü akıl hastası için bir hastaneyi ziyaret etti ve başhekime bir hastanın iyileşip iyileşmediğini veya hala hasta olup olmadığını nasıl belirlediklerini sordu.

- Küveti suyla dolduruyoruz, kenarına kaşıkla bir çay bardağı koyuyoruz ve hastaya suyu çıkarmasını sunuyoruz.

- Muhtemelen, hasta sağlıklıysa kaşık değil bardak alır mı?

- Hasta sağlıklıysa banyodaki mantarı çıkarır.

* * *

Kodda yapmaya çalıştığınız eylemlerin makul olup olmadığı sorusuna kendiniz cevap verebilmelisiniz ve bu o kadar da zor bir soru değil.

Open[1]-Close[1] negatif olabilir. Bir türevde Kapat>Aç olduğunda bir vaka için, bir vaka için Kapat<Aç - diğer değişken için. Veya gövdenin boyutunu, mumun yönüne bağlı olmayacak şekilde hesaplayın.

Anekdot için teşekkürler ..... bundan böyle sadece trafik sıkışıklığı hakkında düşünmeye çalışacağım.

Ama yine de ... bu daldan yetkili kişiler tekrar tekrar ve aynı anda kodumda mantığın yokluğundan bahsettiğinde .... daha sonra booleanda ortaya çıktığı gibi .... Boole cebrini unutmak, otoriteyi umursamamak anlamına gelir. bu branştan ciddi profesyoneller. .... elim buna hemen kalkmaz .... ya da belki hiç kalkmaz ..... Henüz denemedim.

 
borilunad :
Sonra yukarıya bakın, düzeltildi!

Yani çok fazla parantezim mi vardı? Ve zararlılar mı?

Peki, bu parantezleri yazarken derleyici bana hata vermediyse .... Her şeyin yolunda olduğunu düşündüm.

Yakın zamana kadar, derleyici yemin etmezse ve danışman, koduna göre test cihazı üzerinde çalışıyorsa, bu kesinlikle sorun değil diye düşündüm.

Pek doğru değil gibi....

 
solnce600 :

Boris! Desteğin için teşekkürler. Beni biraz sakinleştirdin....

Ama yine de, kodlarımdaki mantık eksikliğiyle ilgili tekrarlanan açıklamalar beni rahatsız ediyor.

Ve beni en çok kızdıran şey, bunun tam olarak neyle ilgili olduğunu anlayamamam.

Bana öyle geliyor ki kodda boole mantığının olmaması önemli.

Onun olup olmadığını nasıl öğrenebilirim?

Burada Alexey, bu pasajda olmadığını ve gerçek hayatta bu parça nedeniyle sorun yaşayabileceğimi söyledi (test cihazında her şey yolunda olmasına rağmen)

eğer (ot==0)

if (Teklif==Fiyat)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Nokta))
if(((Yüksek[1]-Açık[1])>40*Nokta)&&((Yüksek[1]-Açık[1])<60*Puan))

if(((Kapat[1]-Düşük[1])>40*Puan)&&((Kapat[1]-Düşük[1])<60*Puan))

Bir kodlama hatası olması durumunda, her şey açıktır - ya MetaEditor ister ya da Terminaldeki Günlük.

Ve eğer mantığım yoksa ....... bunu nasıl öğrenebilirim Sadece daha deneyimli yoldaşların isteği üzerine.

Ancak, yönlendirmelerinden sonra bile, ÖZEL OLARAK neden bahsettiklerini anlamıyorum.

Boole cebrini öğrenmek benim için gerçekçi değil.


Koşulları açıkça belirtmek için Boole cebrinde uzman olmanıza gerek yok...

Hayatınızı biraz daha kolaylaştırayım... if yerine normal if , else ile && ve and , || üzerinde veya vb. ... o zaman normal kelimelerinizde yazılanları okuyabilecek veya ne yazmak istediğinize karar verebileceksiniz.

Yazdıklarınız (şimdilik, koşulların yanlış tanımını atlayacağız):

1. if (ot==0) Eğer piyasa emri yoksa (hiçbir piyasa emri yok, ne piyasa ne de bekleyen veya bu EA tarafından, başka bir EA tarafından veya manuel olarak açıldı)... Evet ise, o zaman 2. satır yürütülür , değilse, 3. satıra gidin.

2. if (Bid==Fiyat) Eğer fiyat mevcut mumun açılış fiyatına eşitse... Evet ise, 3. satır yürütülür, değilse 4. satıra gidin.

3. if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Puan)) İlk mumun açılış fiyatı daha büyükse ilk mumun kapanış fiyatından 100 puandan fazla ve 120 puandan az... Evet ise, 4. satır yürütülür, değilse 5. satıra gidin.

4. if(((Yüksek[1]-Açık[1])>40*Puan)&&(((Yüksek[1]-Açık[1])<60*Puan)) 40 puandan az ve 60 puandan az.. Evet ise, 5. satır yürütülür, değilse 6. satıra gidin.

5. if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Düşük[1])<60*Point)) İlk mum çubuğunun kapanışı şu değerden yüksekse ilk mum çubuğunun en düşük seviyesi 40 puandan fazla ve 60 puandan az... Evet ise, 6. satır yürütülür, değilse 7. satıra gidin.

6.

7.

Bu genişletmeden görebileceğiniz gibi, ya tüm kod satırlarını sırayla yürütür (her biri true değerini döndürürse) veya false döndüren satırı izleyen satırı atlarsınız.

Koşullarınızda kafa karıştırmamak ve mantığı doğru bir şekilde oluşturmak için , gerçek değerden sonra bir satır mı yoksa tüm bir bloktan sonra mı yürütülmesi gerektiğine bakılmaksızın tüm operatörleri kaşlı ayraçlar içine alın.

Örneğin:

 if (ot== 0 ) {
   if (Bid==Price) {
       // сюда можно вписать целый блок, который будет исполняться лишь при одном условии, что bid==Price
       // только вот вряд ли он когда-либо исполнится в реале
      }
   }
Bu nedenle, yukarıdakilere dayanarak, bu durumda gereksiz olan ekstra parantezleri kaldırarak kodunuzu bileşenlere ayırmayı deneyin ...
Neden: