Çoklu sipariş sorunu - sayfa 3

 
luisneves :


Merhaba Kronin,

Evet, öğrenecek çok şeyim var.... Şimdi, Global'de olması gereken bir fonksiyona dışarıdan erişmek için bir değere ihtiyaç duyulduğunu anlayın.

Bu doğru değil ve genellikle kötü bir fikir.

Kodunuzun bir kısmını bir işleve dönüştürmenin bir nedeni de bu kodu yeniden kullanabilmektir. İşlev, belirli global değişkenlerle çalışmak üzere kodlanmışsa, daha az esnek hale gelebilir. Değişkenleri Kullanıcı Tanımlı İşleve geçirmeyi düşünmelisiniz. . . her zaman genel olarak bildirilen değişkenleri kullanmayın. Örneğin:

 //+--------------------------------------------------------------------------------+
//| ToStr function - calls DoubleToString (double, Digits) and returns the string  |
//+--------------------------------------------------------------------------------+
string ToStr( double ValueToString)
   {
   return (DoubleToStr(ValueToString, Digits ));
   }

//+--------------------------------------------------------------------------------+

. . . bu, genel olarak bildirilen bir değişkeni kullanmaz, çağrıldığında kendisine iletilen değişkeni kullanır. . .

 Print ( "Bid price is: " , ToStr(Bid) );
 
luisneves :


Merhaba Kronin,

Evet, öğrenecek çok şeyim var.... Şimdi, Global'de olması gereken bir fonksiyona dışarıdan erişilmesi gereken bir değere ihtiyaç olduğunu anlayın.

EA'nın 5 basamaklı aracılarda da çalışması gerektiğinden, harici değerler 10 ile çarpılır. Bunu otomatik olarak almak için bu kod bloğunu kullanıyorum, ancak WHRoeder'dan metallerle uyumlu olmayan bir tavsiye alıyorum.

Paritenin yayılması değişken olabilir. Bu yüzden Durma Seviyesinden çıkmak için kod kullanıyorum.

Bu sorunla ilgili olarak " Ancak giriş parametrelerini, tüm siparişlerin hemen hemen aynı anda açılmaması için ayarladım. Belki de varsayılan parametreleri doğrulamanız gerekiyor."

Görebildiğim kadarıyla (olmadığım için üzgünüm ...), OpenDistance 2 pip olarak devam ediyor ve ReturnDistance şimdi 2 ile de. Şu anda siparişin açıldığını görüyorum ama 2 pip farkla açılmıyor. Bu, bir ECN komisyoncusunun (IC Markets) platformundaki bir test cihazı ile çalışır. Bunun bir önemi olabilir mi?

Aslında siparişler aynı anda açılmıyor, ancak açık siparişlere doğru mesafeyi elde etmek için Açık Mesafe ve ReturnDist'in dikkate alınmadığı görülüyor.

Şu kodda var;

OpenOppositeOrder işlevini çağırmak için satırı kalın harflerle ekledim ve burada bunun doğru olup olmadığından emin değilim. Diğer taraf için, 2 pip önce (OpenDistance) olan son tik ile mevcut tik karşılaştırmasının nerede olduğunu göremiyor.

Sorunlarımla sizi sıkmaya başladıysam özür dilerim.

Saygılarımla

Luis



Merhaba Kronin,

Neden yayılmanın ne olduğunu sorduğuma daha fazla dikkat ettim ve Test Cihazında bir şeylerin yanlış olduğunu aradım. Burada yayılma 50'dir (5 basamak) yani aslında 5'tir. Hımmm... Platformu yeniden başlatacağım ve onaylayacağım.

Luis

 
RaptorUK :

Bu doğru değil ve genellikle kötü bir fikir.

Kodunuzun bir kısmını bir işleve dönüştürmenin bir nedeni de bu kodu yeniden kullanabilmektir. İşlev, belirli global değişkenlerle çalışmak üzere kodlanmışsa, daha az esnek hale gelebilir. Değişkenleri Kullanıcı Tanımlı İşleve geçirmeyi düşünmelisiniz. . . her zaman genel olarak bildirilen değişkenleri kullanmayın. Örneğin:

. . . bu, genel olarak bildirilen bir değişkeni kullanmaz, çağrıldığında kendisine iletilen değişkeni kullanır. . .


Merhaba RaptorUK.

Beni doğru yönde tutmak için müdahaleniz için teşekkür ederim...

Bu arada, Tester ile ilgili sorunla ilgili olarak bahsettiğim gibi bir şey duydunuz mu, yani şu anda yayılma 50 iken Cuma günü değil mi?

Saygılarımla

Luis

 
luisneves :


Merhaba RaptorUK.

Beni doğru yönde tutmak için müdahaleniz için teşekkür ederim...

Saygılarımla

Luis

Evet, işlevle ilgili fikir aslında hepsini geçersiz olarak ilan etmek değildi.... EA'nın tekrar ticaret yapmasına izin vermek için LotSize için void MM()'nizdeki bildirimi kaldırdım... - Daha sonra konuşacağımızı düşündüm. yine bu... :-)

'2 pip seviyesinde açık değil'
Örneğin, test etmek için işaret verim yok, ayrıca yayılma 2 pipten fazla (ayarlayabilirim, ancak verilerim yoksa ne işe yarar?). Bütün bunlar, bu kapalı duraklarla güvenilir bir şeyi test etmeyi zorlaştırıyor.


16:21:09 _help_53198_markettorderdecnqv80 girişleri: EquityPercent=1; SabitLotBoyutu=0.01; çarpan=2; LotDigits=2; StopLoss=50; Kâr Al=20; İzleyenDurdur=2; MinimumKar=3; kayma=3; AçıkMesafe=2; DönüşDist=1; MinStop=1; MagicNumber=8012013; MaksSiparişler=7;
EURUSD,M1: açık #1, 0.01 EURUSD'yi 1.43310'dan satın alın tamam
EURUSD,M1: İlk Satın Alma siparişi verildi #1
EURUSD,M1: 1.43310 sl'de 0.01 EURUSD satın al: 1.42810 tp: 1.43510 tamam
EURUSD,M1: açık #2, 0.01 EURUSD'yi 1.43257'den sat tamam
EURUSD,M1: Karşı Satış emri verildi # 2
EURUSD,M1: 2'yi değiştir 0.01 EURUSD'yi 1.43257 sl'de sat: 1.43757 tp: 1.43057 tamam
EURUSD,M1: açık #3 1.43283'ten 0.01 EURUSD satın al tamam
EURUSD,M1: Karşı Satın Alma emri verildi # 3
EURUSD,M1: #3'ü değiştir 1.43283 sl'de 0.01 EURUSD satın al: 1.42783 tp: 1.43483 tamam
EURUSD,M1: açık #4 0.01 EURUSD'yi 1.43230'dan sat tamam
EURUSD,M1: Karşı Satış emri verildi # 4
EURUSD,M1: #4'ü değiştir 0.01 EURUSD'yi 1.43230 sl'den sat: 1.43730 tp: 1.43030 tamam
EURUSD,M1: açık #5 0.01 EURUSD'yi 1.43280'den satın alın tamam
EURUSD,M1: Karşı Satın Alma emri verildi # 5
EURUSD,M1: #5'i değiştirin 0.01 EURUSD'yi 1.43280 sl'den satın alın: 1.42780 tp: 1.43480 tamam
EURUSD, M1: 6. açık 1.43200'den 0.01 EURUSD sat
EURUSD,M1: Karşı Satış emri verildi # 6
EURUSD, M1: #6'yı değiştir 0.01 EURUSD'yi 1.43200 sl'de sat: 1.43700 tp: 1.43000 tamam
EURUSD,M1: açık #7 1.43250'den 0.01 EURUSD satın alın tamam
EURUSD,M1: Karşı Satın Alma emri verildi # 7
EURUSD,M1: #7'yi değiştirin 0.01 EURUSD'yi 1.43250 sl'den satın alın: 1.42750 tp: 1.43450 tamam
EURUSD,M1: #7'yi değiştirin 0.01 EURUSD'yi 1.43250 sl'den satın alın: 1.43267 tp: 1.43450 tamam
EURUSD,M1: #7'yi değiştirin 0.01 EURUSD'yi 1.43250 sl'den satın alın: 1.43283 tp: 1.43450 tamam
EURUSD,M1: #3'ü değiştir 1.43283 sl'de 0.01 EURUSD satın al: 1.43300 tp: 1.43483 tamam
EURUSD,M1: #5'i değiştir 1.43280 sl'de 0.01 EURUSD satın al: 1.43300 tp: 1.43480 tamam
EURUSD,M1: #7'yi değiştirin 0.01 EURUSD'yi 1.43250 sl'den satın alın: 1.43300 tp: 1.43450 tamam
Test cihazı: 1.43300'de (1.43300 / 1.43340) kaybı durdur #3
Test cihazı: Kaybı durdur #5 1.43300 (1.43300 / 1.43340)
Test cihazı: Kaybı durdur #7 1.43300'de (1.43300 / 1.43340)
EURUSD,M1: LastClosedTicket=7
EURUSD,M1: Ticketnr ile sipariş verin: 7 hit SL! Tüm açık siparişleri kapat
EURUSD, M1: 6. kapanış 0.01 EURUSD'yi 1.43200 sl'den sat: 1.43700 tp: 1.43000, 1.43340 fiyatından
EURUSD, M1: 4. kapanış 0.01 EURUSD'yi 1.43230 sl'den sat: 1.43730 tp: 1.43030, 1.43340 fiyatından
EURUSD,M1: 2. kapanış 0.01 EURUSD'yi 1.43257 sl'den sat: 1.43757 tp: 1.43057, 1.43340 fiyatından
EURUSD,M1: 1'i kapat 1,43310 sl'den 0,01 EURUSD satın al: 1.42810 tp: 1.43510, 1.43300 fiyatından

Benim bakış açıma göre, istediğini yapar. OpenOpposite için yaptığınız hesaplamayı hiç değiştirmedim veya ilk sırayı açmadım.

 
kronin :

Evet, işlevle ilgili fikir aslında hepsini geçersiz olarak ilan etmek değildi.... EA'nın tekrar ticaret yapmasına izin vermek için LotSize için void MM()'nizdeki bildirimi kaldırdım... - Daha sonra konuşacağımızı düşündüm. yine bu... :-)

'2 pip seviyesinde açık değil'
Örneğin, test etmek için işaret verim yok, ayrıca yayılma 2 pipten fazla (ayarlayabilirim, ancak verilerim yoksa ne işe yarar?). Bütün bunlar, bu kapalı duraklarla güvenilir bir şeyi test etmeyi zorlaştırıyor.


16:21:09 _help_53198_markettorderdecnqv80 girişleri: EquityPercent=1; SabitLotBoyutu=0.01; çarpan=2; LotDigits=2; StopLoss=50; Kâr Al=20; İzleyenDurdur=2; MinimumKar=3; kayma=3; AçıkMesafe=2; DönüşDist=1; MinStop=1; MagicNumber=8012013; MaksSiparişler=7;
EURUSD,M1: açık #1, 0.01 EURUSD'yi 1.43310'dan satın alın tamam
EURUSD,M1: İlk Satın Alma siparişi verildi #1
EURUSD,M1: 1.43310 sl'de 0.01 EURUSD satın al: 1.42810 tp: 1.43510 tamam
EURUSD,M1: açık #2, 0.01 EURUSD'yi 1.43257'den sat tamam
EURUSD,M1: Karşı Satış emri verildi # 2
EURUSD,M1: 2'yi değiştir 0.01 EURUSD'yi 1.43257 sl'de sat: 1.43757 tp: 1.43057 tamam
EURUSD,M1: açık #3 1.43283'ten 0.01 EURUSD satın al tamam
EURUSD,M1: Karşı Satın Alma emri verildi # 3
EURUSD,M1: #3'ü değiştir 1.43283 sl'de 0.01 EURUSD satın al: 1.42783 tp: 1.43483 tamam
EURUSD,M1: açık #4 0.01 EURUSD'yi 1.43230'dan sat tamam
EURUSD,M1: Karşı Satış emri verildi # 4
EURUSD,M1: #4'ü değiştir 0.01 EURUSD'yi 1.43230 sl'den sat: 1.43730 tp: 1.43030 tamam
EURUSD,M1: açık #5 0.01 EURUSD'yi 1.43280'den satın alın tamam
EURUSD,M1: Karşı Satın Alma emri verildi # 5
EURUSD,M1: #5'i değiştirin 0.01 EURUSD'yi 1.43280 sl'den satın alın: 1.42780 tp: 1.43480 tamam
EURUSD, M1: 6. açık 1.43200'den 0.01 EURUSD sat
EURUSD,M1: Karşı Satış emri verildi # 6
EURUSD, M1: #6'yı değiştir 0.01 EURUSD'yi 1.43200 sl'de sat: 1.43700 tp: 1.43000 tamam
EURUSD,M1: açık #7 1.43250'den 0.01 EURUSD satın alın tamam
EURUSD,M1: Karşı Satın Alma emri verildi # 7
EURUSD,M1: #7'yi değiştirin 0.01 EURUSD'yi 1.43250 sl'den satın alın: 1.42750 tp: 1.43450 tamam
EURUSD,M1: #7'yi değiştirin 0.01 EURUSD'yi 1.43250 sl'den satın alın: 1.43267 tp: 1.43450 tamam
EURUSD,M1: #7'yi değiştirin 0.01 EURUSD'yi 1.43250 sl'den satın alın: 1.43283 tp: 1.43450 tamam
EURUSD,M1: #3'ü değiştir 1.43283 sl'de 0.01 EURUSD satın al: 1.43300 tp: 1.43483 tamam
EURUSD,M1: #5'i değiştir 1.43280 sl'de 0.01 EURUSD satın al: 1.43300 tp: 1.43480 tamam
EURUSD,M1: #7'yi değiştirin 0.01 EURUSD'yi 1.43250 sl'den satın alın: 1.43300 tp: 1.43450 tamam
Test cihazı: 1.43300'de (1.43300 / 1.43340) kaybı durdur #3
Test cihazı: Kaybı durdur #5 1.43300 (1.43300 / 1.43340)
Test cihazı: Kaybı durdur #7 1.43300'de (1.43300 / 1.43340)
EURUSD,M1: LastClosedTicket=7
EURUSD,M1: Ticketnr ile sipariş verin: 7 hit SL! Tüm açık siparişleri kapat
EURUSD, M1: 6. kapanış 0.01 EURUSD'yi 1.43200 sl'den sat: 1.43700 tp: 1.43000, 1.43340 fiyatından
EURUSD, M1: 4. kapanış 0.01 EURUSD'yi 1.43230 sl'den sat: 1.43730 tp: 1.43030, 1.43340 fiyatından
EURUSD,M1: 2. kapanış 0.01 EURUSD'yi 1.43257 sl'den sat: 1.43757 tp: 1.43057, 1.43340 fiyatından
EURUSD,M1: 1'i kapat 1,43310 sl'den 0,01 EURUSD satın al: 1.42810 tp: 1.43510, 1.43300 fiyatından

Benim bakış açıma göre, istediğini yapar. OpenOpposite için yaptığınız hesaplamayı hiç değiştirmedim veya ilk sırayı açmadım.


Merhaba Kronin,

Başka bir komisyoncudan başka bir platform indiriyorum ve tekrar test etmek ve sonuçları size bildirmek için bekleyeceğim.

Tekrar teşekkürler

Luis

 

Merhaba Kronin,

Az önce Tester'da spread'in 5 pip'e (50) sıçradığını onayladım. Bugün Tester'da kodunuz gayet iyi çalışıyor, şimdi onu bir ECN Demo hesabına koydum ve göreceğiz.

Saygılarımla

Luis

 

Merhaba Kronin,

Bir konu;

EA başladığında, ilk emri açmadan önce fiyatın 2 pip sapmasını beklemesi gerekmez mi?

İkinci mertebe açılma şartına sahip olduğunda doğru yerde açılır.

Saygılarımla

Luis

 
luisneves :

Merhaba Kronin,

Bir konu;

EA başladığında , ilk emri açmadan önce fiyatın 2 pip sapmasını beklemesi gerekmez mi?

İkinci mertebe açılma şartına sahip olduğunda doğru yerde açılır.

Saygılarımla

Luis

Merhaba Luis

Eh, muhtemelen stratejiye göre olmalı, ama elbette koda göre değil...

 if (OpenDistance*pt && BuyAllowed) //<-- this doesn't make any sense.

Yukarıdakiler if(2*0,0001 && true) olarak okunur. 0'dan farklı herhangi bir sayısal ifade doğru olarak yorumlanır. Yani BuyAllowed doğruysa ifade her zaman doğrudur.

Üzgünüm, bir serinin ilk açılışına hiç dikkat etmedim ve sadece 2 pip olduğu için olağandışı bir şey fark etmedim.

Bunu dene:

 //global scope
double BuyTrigger,SellTrigger;

//init function
BuyTrigger=Ask+OpenDistance*pt;
SellTrigger=Bid-OpenDistance*pt;

//start function
  OTCurrentTick= OrdersTotal ();                   //reinit OrderTotal   <<-- this is already there, place the 4 lines below after this line
   if (OTCurrentTick== 0 &&OTLastTick> 0 ){
     BuyTrigger=Ask+OpenDistance*pt;
     SellTrigger=Bid-OpenDistance*pt;
  }

if (Ask>BuyTrigger && BuyAllowed)                // <-- use this instead of if (OpenDistance*pt && BuyAllowed)

if (Bid<SellTrigger && SellAllowed)
 

Merhaba Kronin,

Kodu anlama konusundaki sınırlamalarımdan sizi sıktığım için özür dilerim, yine de öğrenmek için çok geç değil ve nezaketle sağladığınız koda girmek için elimden gelenin en iyisini yapmaya çalışıyorum.

Şu anda kullanılacak en iyi ayarları test ediyorum ve güncellenen son kodunuzu tanıtacağım.

Bu konularda bana destek olmaya devam edeceğiniz için şimdiden teşekkür ederim(maceralar...Yani.....)

Luis

 

Merhaba Kronin,

Modifikasyonunuz çalışıyor. Maksimum siparişleri sınırladınız, bunun yerine hepsini kapatmak mümkün mü?

Bunu aşağıdaki kodla yapmaya çalıştım ama işe yaramıyor gibi görünüyor.

 if (LastClosedTicket> 0 || OrdersTotal ()>= MaxOrders)

Saygılarımla

Luis