Nasıl kodlanır? - sayfa 250

 
mladen:

Merhaba Mladen, yardımın için teşekkürler, değişikliklerinizi uyguladım ama gerçekten işe yaramıyor, belki EA mevcut açık işlemleri yok sayarsa daha basit olurdu, yani onları açık bırakın ve sonra kendi yeni tekli ticaretini açıp kapatır

Şu anda kendi ticaretini açıp kapatıyor, ancak mevcut ek açık işlemleri de kapatıyor.

 

artırmak

Kısmi bir koddan önerebileceğim şey bu. NoCloses Boole parametresi oluşturulursa ve bu parametre true olarak ayarlanırsa , snippet gibi uygulanırsa siparişleri kapatmamalıdır ( CB ve CS 1'e eşit değilse bu kod siparişleri kapatmaz)

Saygılarımızla

Mladen

increase:
Merhaba Mladen, yardımın için teşekkürler, değişikliklerinizi uyguladım ama gerçekten işe yaramıyor, belki EA mevcut açık işlemleri yok sayarsa, yani onları açık bırakın ve ardından kendi yeni tek ticaretini açıp kapatırsa daha kolay olurdu Şu anda kendi ticaretini açıp kapatıyor, ancak mevcut ek açık işlemleri de kapatıyor.
 
mladen:
artırmak

Kısmi bir koddan önerebileceğim şey bu. NoCloses Boole parametresi oluşturulursa ve bu parametre true olarak ayarlanırsa , snippet gibi uygulanırsa siparişleri kapatmamalıdır ( CB ve CS 1'e eşit değilse bu kod siparişleri kapatmaz)

Saygılarımızla

Mladen

Bu doğru ama eğer yanlış anlamadıysam, bu EA tarafından açılan ticaretin de asla kapanmayacağı ve sadece alım ve satım arasında geçiş yapacağı anlamına mı geliyor?

 

Evet. bu doğru

Anladığım kadarıyla bu senin fikrindi: EA'nın siparişleri açmasına izin vermek ve ardından siparişleri manuel olarak yönetmek (kapatmak). Bu parametre ile onu tekrar false olarak değiştirebilirsiniz ve ardından EA kapanış emirlerine devam edecektir - yani "dışarıdan kontrol edilebilir", bir nevi konuşma

increase:
Bu doğru ama eğer yanlış anlamadıysam, bu EA tarafından açılan ticaretin de asla kapanmayacağı ve sadece alım ve satım arasında geçiş yapacağı anlamına mı geliyor?
 
mladen:
Evet. bu doğru Anladığım kadarıyla bu sizin fikrinizdi: EA'nın siparişleri açmasına izin vermek ve ardından siparişleri manuel olarak (kapatmak) yönetirsiniz. Bu parametre ile onu tekrar false olarak değiştirebilirsiniz ve ardından EA kapanış emirlerine devam edecektir - yani "dışarıdan kontrol edilebilir", bir nevi konuşma

Ah üzgünüm belirsizdim, EA'nın siparişini açıp kapatmasını ve mevcut siparişleri yoksaymasını istiyorum, bu nedenle örneğin

1. Açık 5 satış emrim var

2. 1 satın alma siparişi açtığı EA'yı uygularım

3. Şimdi 5 satış ve 1 alışım var

4. EA şimdi bir satışı tetikler, böylece satın alma işlemini kapatır

5. Şimdi 6 satış (5 mevcut, 1 EA satış) emrim var

6. EA şimdi bir satın almayı tetikler, böylece satışını kapatır

7. Şimdi 5 tane satıyorum ve 1 tane alışım var.

Mevcut satışları kapatacağım, EA yukarıdaki gibi kendi dışındaki diğer işlemleri görmezden geliyor

 

artırmak

Magic parametresini 0'dan farklı bir değere ayarlarsanız bunu zaten yapar (bu, bir satın alma siparişini kapatma emrinden hemen önce kapatmasını kontrol eden kodun bir parçasıdır)

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&( (OrderMagicNumber()==Magic)||Magic==0))

Yani " Magic " 0'a eşit değilse ve Magic'in değerinin benzersiz olması şartıyla sadece kendi açtığı emirleri kapatacaktır.

increase:
Ah üzgünüm belirsizdim, EA'nın siparişini açıp kapatmasını ve mevcut siparişleri yoksaymasını istiyorum, bu nedenle örneğin

1. Açık 5 satış emrim var

2. EA'yı uygularım, 1 satın alma siparişi açar

3. Şimdi 5 satış ve 1 alışım var

4. EA şimdi bir satışı tetikler, böylece satın alma işlemini kapatır

5. Şimdi 6 satış (5 mevcut, 1 EA satış) emrim var

6. EA şimdi bir satın almayı tetikliyor, böylece satışını kapatıyor

7. Şimdi 5 tane satıyorum ve 1 tane alışım var.

Mevcut satışları kapatacağım, EA yukarıdaki gibi kendi dışındaki diğer işlemleri görmezden geliyor
 

Belirli bir TimeFrame için OncePerBar ticareti yapın

Merhaba sevgili arkadaşlar!

Test cihazında iyi çalışan EA'ya (evet, yapmayan) sahibim, talimat verildiği gibi 4H Bar başına birden fazla işlem yapıyor. Şimdi, Demo'da (Alpari UK) 11 çiftle test yaparken, EA yalnızca 1 işlem alırken, daha fazla alması gerekir (talimat edildiği gibi en fazla 3 işlem). Koşullar karşılanıyorsa, yalnızca her 4H çubuğunda bir.

GlobalVariable ile kodlanmış 'Semaphor' işlevine ve bu kod parçasına, önceden tanımlanmış 1 TimeFrame (bu durumda 4H) içinde birden fazla siparişin açılmasını önlemek için sahibim:

//Satın almak

if (Sipariş == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount))))

{

if (Yalnızca Sinyaller)

{

// ------ Uyarı, sinyal başına yalnızca bir kez VEYA her 15 veya 30 Dakikada bir olmalıdır

if (CheckAlertTime == iTime (NULL, 5, 0)) return(0);

başka CheckAlertTime = iTime (NULL, 5, 0);

if (Uyarılar) Uyarısı (Symbol() + " " + DoubleToStr (Sor, Rakamlar) + " SATIN AL Sinyali");

if (PlaySounds) PlaySound (HangiSound);

}

if (!IsTrade && !SignalsOnly)

{

if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);

başka CheckAlertTime = iTime (BOŞ, OncePerBarTF, 0);

// Serbest marjı kontrol et

if (AccountFreeMargin() < (1000 * Lot))

{

Yazdır ("Paramız yok. Serbest Marj = ", AccountFreeMargin());

dönüş(0);

}

if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Sor + TakeProfit * Puan; başka TakeProfitLevel = 0.0;

{

if (MoneyManagement) Lotlar = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Puan / TickValue)) 2);

başka Çok = Çok;

}

if (TradeIsBusy() && IsTradingAllowed() < 0)

dönüş (-1);

Yenileme Oranları();

Ticket = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY" + MagicNo, MagicNo, 0, DodgerBlue);

eğer (Bilet > 0)

{

if (Sipariş Seçimi (Bilet, SELECT_BY_TICKET, MODE_TRADES))

{

Yazdır ("7Qi BUY açıldı: ", OrderOpenPrice());

if (Uyarılar) Alert (Symbol() + " " + DoubleToStr (Sor, Rakamlar) + " SATIN AL açıldı");

if (PlaySounds) PlaySound (HangiSound);

}

başka

{

Yazdır ("BUY açılırken hata: ", Err);

}

}

// TradedThisBar = Çubuklar;

if (EachTickMode) TickCheck = Doğru;

if (!EachTickMode) BarCount = Çubuklar;

TradeIsNotBusy();

dönüş (0);

}

}

//------------------------------------------------ -

Bu kodun olması mümkün mü:

if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);

başka CheckAlertTime = iTime (BOŞ, OncePerBarTF, 0);

EA'nın Saat ortasında işlem yapmasını engelliyor mu? Sadece Bar'ın başında mı kontrol ediyor?

"TradedThisBar = Bars" işlevini kullanırsam EA'yı yalnızca 1 TimeFrame'de bırakmam gerekir, doğru mu?

'Semafor' işlevi TrailingStops'ta da kodlanmıştır, PartialCloseLots'ta da.

HEPİNİZE yardımlarınız için teşekkürler,

İyi eğlenceler,

Simon

Slovenya

 

iiiiiiik - sorunu buldum

Merhaba!

Sorunu buldum - büyük olasılıkla aşağıdakilerin birleşimidir:

if (TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)

dönüş (-1);

//------------------------------------------------ --------------------------------------------

int IsTradingAllowed (int MaxWaitingSec = 30)

{

if (!IsTradeAllowed())

{

int StartWaitingTime = GetTickCount();

Yazdır ("Ticaret bağlamı meşgul! Boş olana kadar bekleyin...");

if (Uyarılar) Alert (Symbol() + " EA ticaretine izin verilmiyor! Bekleniyor...");

süre (doğru)

{

eğer (IsStopped())

{

Yazdır ("EA sonlandırıldı!");

dönüş(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )

{

Print("Bekleme limiti aşıldı (" + MaxWaitingSec + "sn)!" );

dönüş(-2);

}

if (IsTradeAllowed())

{

Yazdır ("Ticaret bağlamı artık ücretsiz!");

dönüş(0);

}

Uyku (100);

}

}

başka

{

Yazdır ("Ticaret bağlamı ücretsizdir!");

dönüş(1);

}

}

*/

//------------------------------------------------------

int TradeIsBusy (int MaxWaitingSec = 30)

{

if (IsTesting()) return(1);

int Hata = 0, StartWaitingTime = GetTickCount();

süre (doğru)

{

eğer (IsStopped())

{

Yazdır ("EA sonlandırıldı!");

dönüş(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Yazdır ("Bekleme süresi (" + MaxWaitingSec + " sn) aşıldı!");

if (Uyarılar) Alert (Symbol() + "EA bekleme süresi aşıldı!");

dönüş(-2);

}

if (GlobalVariableCheck ("Ticaret Meşgul"))

kırmak;

başka

{

Hata = GetLastError();

eğer (Hata != 0)

{

Yazdır ("TradeIsBusy - GlobalVariableCheck - Hata # ", Hata);

Uyku (100);

devam etmek;

}

}

if (GlobalVariableSet ("TradeIsMeşgul", 1.0) > 0) dönüş(1);

başka

{

Hata = GetLastError();

eğer (Hata != 0)

{

Yazdır ("TradeIsBusy - GlobalVariableSet - Hata # ", Hata);

Uyku(100);

devam etmek;

}

}

}

süre (doğru)

{

eğer (IsStopped())

{

Yazdır ("EA sonlandırıldı!");

dönüş(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Yazdır ("Bekleme süresi (" + MaxWaitingSec + " sn) aşıldı!");

if (Uyarılar) Alert (Symbol() + "bekleme süresi aşıldı!");

dönüş (-2);

}

if (GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) return (1);

başka

{

Hata = GetLastError();

eğer (Hata != 0)

{

Yazdır ("TradeIsBusy - GlobalVariableSetOnCondition - Hata # ", Hata);

devam etmek;

}

}

if (Uyarılar) Alert (Symbol() + " - ticareti bitirmek için başka bir EA bekleniyor...");

Uyku (1000);

}

}

//--------------------------------

geçersiz TradeIsNotMeşgul()

{

int Hata;

eğer (IsTesting())

{

dönüş(0);

}

süre (doğru)

{

eğer (IsStopped())

{

Yazdır (Symbol() + "EA sonlandırıldı!");

dönüş(-1);

}

if (GlobalVariableSet ("TradeIsMeşgul", 0.0) > 0) return(1);

başka

{

Hata = GetLastError();

eğer (Hata != 0)

Yazdır ("TradeIsNotBusy - GlobalVariableSet - Hata # ", Hata);

}

Uyku (100);

}

}

//------------------------------------------------ --------------------------------------------------

IsTradeAllowed işlevi olmadan deneyeceğim.

Yine de teşekkürler,

İyi eğlenceler,

Simon

 

hata kodu 130

----- silindi ----- artık gerekli değil......

 

İndirilebilir mq4 öğreticisi

Merhaba millet,

mq4 kodu hakkında bir eğitim veya referans kitabı (çevrimiçi değil !!) bulamıyorum.

Bana yardımcı olabilir misiniz ?

saygılarımla

ÇÖZÜLDÜ, dosyayı bir yardımcı programla açmak zorunda kaldı.