Kodlama yardımı - sayfa 157

 
mladen:
Christoff

Bu şekilde Decimals değişkeni tamam olmalıdır

Her durumda, başarısız sipariş (kısmi) kapatma durumunda hangi hata kodunu aldığınızı kontrol edin.

Mladen,

İpucu için teşekkürler.

Sorun şu ki, hiçbir hata mesajı yok. Çalışmadığında, ParsiyelTP işlevi çağrılmamış gibi görünüyor. Diğer zamanlarda - genellikle EA yeniden başlatıldıktan sonraki ilk siparişlerde - iyi çalışır.

Değişkenlerden birinin sıfır değerine dönmediğini veya bunun gibi bir şey olabileceğini düşündüm ama yine de hatayı bulamıyorum.

 
chrisstoff:
Mladen,

İpucu için teşekkürler.

Sorun şu ki, hiçbir hata mesajı yok. Çalışmadığında, ParsiyelTP işlevi çağrılmamış gibi görünüyor. Diğer zamanlarda - genellikle EA yeniden başlatıldıktan sonraki ilk siparişlerde - iyi çalışır.

Değişkenlerden birinin sıfır değerine dönmediğini veya bunun gibi bir şey olabileceğini düşündüm ama yine de hatayı bulamıyorum.

chrisstoff

Üzgünüm, ancak kısmi bir kodla daha fazla yardımcı olamam

Tanımladığınız şey, kodda hata ayıklamaya ihtiyaç olduğu anlamına gelir - ve bu, yalnızca bir tür kontrol noktası kullanılırken yürütülerek yapılabilir.

 
mladen:
chrisstoff

Üzgünüm, ancak kısmi bir kodla daha fazla yardımcı olamam

Tanımladığınız şey, kodda hata ayıklamaya ihtiyaç olduğu anlamına gelir - ve bu, yalnızca bir tür kontrol noktası kullanılırken yürütülerek yapılabilir.

Teşekkürler Mladen.

Kodda sorun görmemiş olmanız güven verici.

Kodun ilgili tüm bölümlerinin gönderildiğini düşünüyorum, bu yüzden hatayı başka bir yerde bulmam gerekiyor.

 
mladen:
hock87

Bu sorunun çözümü için lütfen gönderinizin üstündeki gönderiyi okuyun

Bunun için tam kod aşağıdaki gibidir:

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

malden,

Hesap bakiyemin belirli bir yüzdesi kadar lot büyüklüğü açmak istersem, bunu nasıl kodlayabilirim?

Misal:

Hesap bakiyem 500$,

%5 ile bir lot boyutu açmak istiyorum, ardından otomatik olarak sayıyor ve 0,25$ lotu açıyor, TP=10 SL=20.

Nasıl kodlanır?

Teşekkürler.

 
hock87:
malden,

Hesap bakiyemin belirli bir yüzdesi oranında lot büyüklüğü açmak istersem, bunu nasıl kodlayabilirim?

Misal:

Hesap bakiyem 500$,

%5 ile bir lot boyutu açmak istiyorum, ardından otomatik olarak sayıyor ve 0,25$ lotu açıyor, TP=10 SL=20.

Nasıl kodlanır?

Teşekkürler.

Bunun için şöyle bir fonksiyon kullanabilirsiniz:

double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

Not: stopLoss, işleve zaten pip/puan cinsinden geçirilmelidir (tamsayı değerlerinde değil)

 
mladen:
Bunun için şöyle bir fonksiyon kullanabilirsiniz:
double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

Not: stopLoss, işleve zaten pip/puan cinsinden geçirilmelidir (tamsayı değerlerinde değil)

Teşekkürler, Mladen.

Ancak sipariş kodunu satın almak için kodu birleştirmeyi başaramadım.

Birçok hata ve uyarı görünüyor.

Nasıl birleştirilir?

Teşekkürler.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
 
hock87:
Teşekkürler, Mladen.

Ancak sipariş kodunu satın almak için kodu birleştirmeyi başaramadım.

Birçok hata ve uyarı görünüyor.

Nasıl birleştirilir?

Teşekkürler.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}

Şu şekilde deneyin (şimdi test ettim ve çalışıyor):

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int init() { return(0); }

int deinit() { return(0); }

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point*MathPow(10,Digits%2));

prof=(Ask+profsize*Point*MathPow(10,Digits%2));

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
Dosyalar:
_test_1.mq4  1 kb
test_1.gif  78 kb
 

sevgili mladen ve mr. araçlar lütfen,

önceden tanımlanmış koşulları karşılayan 3 veya 4 göstergenin sinyalleri gibi belirli koşullara göre sinyal veren bir adet oluşturmak mümkün müdür.

Örneğin

ea'nın bir buy hwen sinyali vermesini istiyorum:

ema 8 çapraz ema 21

0'ın üzerinde qqe

gecikmesiz ma yeşil

ve mum ichimoku bulutunun üstünde

EA ticaret açmamalı, sadece belirtilen koşullar karşılandığında sinyali vermelidir.

 

Teşekkürler Mladen.

denedim var.

ama yine de lotları 0.1$ ile açıyor

İstiyorum hesap bakiyemin belirli bir yüzdesi oranında açık parti büyüklükleri .

ÖRNEK: hesap bakiyesi 500$'a sahip.

%5 ile bir lot boyutu açın, ardından otomatik olarak sayın ve 0,25$ lotu açın, TP=10 SL=20.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = 500$*(%5/100)

LotSizeSlot1 = 0,25 ABD doları

Sonra otomatik olarak 0.25$ lot açar ve TP=10 SL=20.

Nasıl oluşturulur?

Teşekkürler.

 
hock87:
Teşekkürler Mladen.

denedim var.

ama yine de lotları 0.1$ ile açıyor

Hesap bakiyemin belirli bir yüzdesi oranında lot büyüklükleri açmak istiyorum .

ÖRNEK: hesap bakiyesi 500$'a sahip.

%5 ile bir lot boyutu açın, ardından otomatik olarak sayın ve 0,25$ lotu açın, TP=10 SL=20.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = 500$*(%5/100)

LotSizeSlot1 = 0,25 ABD doları

Sonra otomatik olarak 0.25$ lot açar ve TP=10 SL=20.

Nasıl oluşturulur?

Teşekkürler.

ekteki gibi

Dosyalar:
_test_2.mq4  2 kb
Neden: