Soru: while(!IsStopped()) nasıl çalışır? Yardımdan tam olarak net değil, Canlı Ticarete İzin Ver için bir çek olduğunu düşündüm.
Bu, uzmanı dışarıdan kapatmak isteyip istemediklerinin bir kontrolüdür.
Soru: Bu süre ve Uyku sistemi yavaşlatmaz mı?
sistem yavaşlamayacak. sadece tek bir uzman
Soru: Uyku ve semafor, test modunda doğru şekilde işlenecek mi?
testteki kayma hiçbir şekilde çözülmez, basitçe atlanır. bir semafor ile soru daha zordur. gerçek çalışan uzmanlar, test sırasında bu semafor için rekabet edebilir. Test ederken, yalnızca bir Uzman Danışman test edildiğinden semaforları hiç kullanamazsınız - etkileşimli Uzman Danışmanların eşzamanlı testini düzenleyemiyoruz. test sırasında bir semaforla çalışmayı hariç tutmak için IsTesting işlevini kullanın
Daha mantıklı. Bir semafor ayarlamak ve kaldırmak arasında, siparişlerle çalışmak için iki (maksimum) fırsatımız var. Önce Buy() veya Sell() ve ardından aşağıda, CloseOrder(). Bu iki "faaliyet", bir uzman içinde bile, aynı zamanda iki uzman varmış gibi birbirleriyle rekabet etmeyecek mi? Yoksa işlemin lineer olması garanti mi ve Buy() dönene kadar CloseOrder() oraya ulaşmayacak mı?
bu faaliyetler birbiriyle rekabet etmeyecektir, çünkü alım satım işlemlerimiz artık senkrondur, yani Expert Advisor alım satım işleminin tamamlanmasını beklemektedir. "sürecin doğrusal olması garanti edilir"
Tartışmamızdan teşekkür ederim, faydalı tavsiyelere ek olarak, çok teşekkürler, bir fikir yaptım :) Daha doğrusu bir öneri. Daha önce bahsetmiştim, tekrar edeceğim.
MT'de sipariş kuyruğu oluşturmanız gerekmez mi? Yani, oradaki bir pozisyonla çalışmak için eşzamansız olarak bir istek yazabilirsiniz ve MT, zaman olduğunda ve başka kimsenin oraya sığmayacağı garantisiyle bu talebi ayrı bir iş parçacığında işleyecektir.
global değişken 0.0 değerine sahipse, değeri 1.0 olarak ayarlayın ve true değerini döndürün. aksi takdirde hiçbir şey yüklemeyin. bir işlev çağrısında değeri kontrol etme ve değiştirme.
Her ihtimale karşı "birkaç gün" dedim. umarım bugün yayınlar
MT'de sipariş kuyruğu oluşturmanız gerekmez mi? Yani, oradaki bir pozisyonla çalışmak için eşzamansız olarak bir istek yazabilirsiniz ve MT, zaman olduğunda ve başka kimsenin oraya sığmayacağı garantisiyle bu talebi ayrı bir iş parçacığında işleyecektir.
1. Bu 100 gönderide, Expert Advisor üzerinde çalışırken ve doğrudan onunla ilgili olmayan birkaç hata bulundu. Örneğin, Uzman Danışmanlar, Canlı Ticarete İzin Ver onay kutusu kaldırıldıktan sonra bile ticaret yapmaya devam eder. Umarım onları unutmazsın.
2. Aşağıda TEKRAR uzman kodunu veriyorum. 1, 129, 138 hataları üretir. a) 138'in ( requote ) ne olduğunu, neden oluştuğunu, semaforlarla ilgili olup olmadığını ve nasıl kaldırılacağını açıklayabilir misiniz? b) Neden 129? Fiyatlar bir hata ile birlikte görüntüleniyor, doğru görünüyorlar. c) Şey, yaklaşık 1 de.
Size test yöntemini hatırlatmama izin verin: 12 para birimi için 12 dakikalık pencereler.
hata 138 yeniden alıntı kolayca oluşabilir. Potansiyel olarak, çalışan 10 uzmanla, bir semafor sürümü için bekleme süresi 30 saniye veya daha fazla olabilir. Bu süre zarfında fiyat kolayca değişebilir. bu durumda, RefreshRates işlevini kullanın ve yeni teklifi veya talep değerini alın. veya yeni bir fiyat için MarketInfo ile iletişime geçin. 129 - aynı planın hatası, yanlış fiyat - fiyat çok ileri gitti ve bekleme süresi boyunca birkaç değişiklik oldu. 1 kesinlikle bir hata değildir. önceden ayarlanmış aynı değerlere sahip bir siparişi değiştirme girişiminde bulunulduğunda görünür. gelmesi garip. bizim durumumuzda, bir işlem iptal edildiğinde bir işlemi manuel olarak onaylarken ortaya çıkar.
Senin örneğin daha iyi olurdu
[/alıntı]
Bu örnek çalışmıyor. Hatalar verir. Daha deneyimli bir geliştirici olarak, çalışmasına yardımcı olabilir misiniz?
Samimi olarak,
kuark
Soru: while(!IsStopped()) nasıl çalışır? Yardımdan tam olarak net değil, Canlı Ticarete İzin Ver için bir çek olduğunu düşündüm.
Bu, uzmanı dışarıdan kapatmak isteyip istemediklerinin bir kontrolüdür.
Soru: Bu süre ve Uyku sistemi yavaşlatmaz mı?
sistem yavaşlamayacak. sadece tek bir uzman
Soru: Uyku ve semafor, test modunda doğru şekilde işlenecek mi?
testteki kayma hiçbir şekilde çözülmez, basitçe atlanır. bir semafor ile soru daha zordur. gerçek çalışan uzmanlar, test sırasında bu semafor için rekabet edebilir. Test ederken, yalnızca bir Uzman Danışman test edildiğinden semaforları hiç kullanamazsınız - etkileşimli Uzman Danışmanların eşzamanlı testini düzenleyemiyoruz. test sırasında bir semaforla çalışmayı hariç tutmak için IsTesting işlevini kullanın
Daha mantıklı. Bir semafor ayarlamak ve kaldırmak arasında, siparişlerle çalışmak için iki (maksimum) fırsatımız var. Önce Buy() veya Sell() ve ardından aşağıda, CloseOrder(). Bu iki "faaliyet", bir uzman içinde bile, aynı zamanda iki uzman varmış gibi birbirleriyle rekabet etmeyecek mi? Yoksa işlemin lineer olması garanti mi ve Buy() dönene kadar CloseOrder() oraya ulaşmayacak mı?
bu faaliyetler birbiriyle rekabet etmeyecektir, çünkü alım satım işlemlerimiz artık senkrondur, yani Expert Advisor alım satım işleminin tamamlanmasını beklemektedir. "sürecin doğrusal olması garanti edilir"
zorlamayacağım. GlobalVariableSetOnCondition işlevi için birkaç gün bekleyin, ardından tüm erişim denetimi sorunları çözülecektir
zorlamayacağım. GlobalVariableSetOnCondition işlevi için birkaç gün bekleyin, ardından tüm erişim denetimi sorunları çözülecektir
GlobalVariableSetOnCondition işlevini MT'ye eklemeyi planlıyorsanız, bunun hakkında önceden birkaç şey söyleyebilir misiniz?
Bu durumda nasıl kullanmayı önerirsiniz?
Birkaç gün - hafta sonunu mu sayıyorsunuz?
MT'de sipariş kuyruğu oluşturmanız gerekmez mi? Yani, oradaki bir pozisyonla çalışmak için eşzamansız olarak bir istek yazabilirsiniz ve MT, zaman olduğunda ve başka kimsenin oraya sığmayacağı garantisiyle bu talebi ayrı bir iş parçacığında işleyecektir.
kuark
Bu durumda nasıl kullanmayı önerirsiniz?
Birkaç gün - hafta sonunu mu sayıyorsunuz?
örnek verdim zaten
if(GlobalVariableSetOnCondition(SemaphoreName, 1.0, 0.0)==true) { bSemaforlu=doğru; kırmak; }global değişken 0.0 değerine sahipse, değeri 1.0 olarak ayarlayın ve true değerini döndürün. aksi takdirde hiçbir şey yüklemeyin. bir işlev çağrısında değeri kontrol etme ve değiştirme.
Her ihtimale karşı "birkaç gün" dedim. umarım bugün yayınlar
sipariş kuyruğu yapmayacağız
örnek verdim zaten
Sadece ne olduğunu söylemediler :) Fonksiyonun bana yazılması önerildi sanıyordum.
Her ihtimale karşı "birkaç gün" dedim. umarım bugün yayınlar
Teşekkür ederim.
1. Bu 100 gönderide, Expert Advisor üzerinde çalışırken ve doğrudan onunla ilgili olmayan birkaç hata bulundu. Örneğin, Uzman Danışmanlar, Canlı Ticarete İzin Ver onay kutusu kaldırıldıktan sonra bile ticaret yapmaya devam eder. Umarım onları unutmazsın.
2. Aşağıda TEKRAR uzman kodunu veriyorum. 1, 129, 138 hataları üretir. a) 138'in ( requote ) ne olduğunu, neden oluştuğunu, semaforlarla ilgili olup olmadığını ve nasıl kaldırılacağını açıklayabilir misiniz? b) Neden 129? Fiyatlar bir hata ile birlikte görüntüleniyor, doğru görünüyorlar. c) Şey, yaklaşık 1 de.
Size test yöntemini hatırlatmama izin verin: 12 para birimi için 12 dakikalık pencereler.
Samimi olarak,
kuark
double dStopLoss; int nHoursToHold; datetime timePrev = 0; int nBars; int nDelaySeconds = 3; int nSlip = 50; double dLotSize = 0.1; int nMagic = 0; int nDigits; string strTradeSemaphore = "TradeSemaphore"; ////////////////// int init () { nBars = Bars; if(!IsTesting() && !GlobalVariableCheck(strTradeSemaphore)) GlobalVariableSet(strTradeSemaphore, 0.0); dStopLoss = 110 * Point; nHoursToHold = 1; nDigits = MarketInfo( Symbol(), MODE_DIGITS ); if(Symbol() == "EURUSD") nMagic = 1; else if(Symbol() == "EURJPY") nMagic = 2; else if(Symbol() == "USDCHF") nMagic = 3; else if(Symbol() == "GBPUSD") nMagic = 4; else if(Symbol() == "GBPJPY") nMagic = 5; else if(Symbol() == "GBPCHF") nMagic = 6; else if(Symbol() == "USDJPY") nMagic = 7; else if(Symbol() == "AUDUSD") nMagic = 8; else if(Symbol() == "EURGBP") nMagic = 9; else if(Symbol() == "USDCAD") nMagic = 10; else if(Symbol() == "EURCHF") nMagic = 11; else if(Symbol() == "EURAUD") nMagic = 12; return(0); } // ------ int deinit() { return(0); } // ------ int start() { if(Bars < 5) return(0); /* // The previous bar just closed bool bIsBarEnd = false; if(timePrev != Time[0] + nMagic) bIsBarEnd = true; timePrev = Time[0] + nMagic; */ bool bIsBarEnd = false; if(nBars != Bars) { if(IsTesting() || (!IsTesting() && CurTime() > Time[0] + nMagic * nDelaySeconds)) { bIsBarEnd = true; nBars = Bars; } } if(!bIsBarEnd) return(0); // ------ if(!IsTesting()) { while(!IsStopped()) { if(GlobalVariableGet(strTradeSemaphore) == 0.0) GlobalVariableSet(strTradeSemaphore, nMagic); if(GlobalVariableGet(strTradeSemaphore) == nMagic) break; Sleep(1000); } } for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60) { if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } } int nSignal = GetSignal(); if(nSignal == OP_BUY) Buy(); else if(nSignal == OP_SELL) Sell(); if(!IsTesting()) GlobalVariableSet(strTradeSemaphore, 0.0); return(0); } // ------ void Sell() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dBid = Bid;//MathFloor(Bid * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Bid + dStopLoss;//MathFloor((Bid + dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, dBid, nSlip, dStop, 0, "Friday", nMagic, 0, OrangeRed); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", sell: " + dBid + ", Stop: " + dStop + ", error: " + nError); } } // ------ void Buy() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dAsk = Ask;//MathFloor(Ask * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Ask - dStopLoss;//MathFloor((Ask - dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, dAsk, nSlip, dStop, 0, "Friday", nMagic, 0, Aqua); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", buy: " + dAsk + ", Stop: " + dStop + ", error: " + nError); } } // ------ double GetLotSize() { double dLot = 0.1; return(dLot); } // ------ int GetSignal() { int nSignal; if(MathMod(Hour(), 2) == 0) nSignal = OP_BUY; else nSignal = OP_SELL; return(nSignal); }