Nasıl kodlanır? - sayfa 289

 

Bu EA'yı bitirmek için yardıma ihtiyacınız var

Aşağıdakileri yapan bir EA (zaten yapılmış bazı kodları kullanarak) kodlamaya çalışıyorum:

  • Hem SL hem de TP ile belirli bir zamanda (bu durumda 23:00) bekleyen iki emir, bir satış durdurma ve bir satın alma durdurma açar.
  • Bekleyen emrin süresi belirli bir saatte (örneğin 10:00'da) sona erer ve 23:00 Cuma günü herhangi bir işlem açmaz.
  • İki işlem açılır ve biri SL'ye ulaşırsa, diğerinin TP'si belirli bir miktara yükselir (Sanırım OrderModify böyle bir şeyi çözecektir).
  • Ertesi gün saat 23:00'te otomatik olarak açık olan işlemler kapanır.
  • EA neredeyse tamamlandı ve daha önce sahip olduğum bazı sorunlar çözüldü ve yukarıdakilerin çoğunu yapıyor ancak hala aşağıdaki sorunları yaşıyorum ve bu noktada nasıl daha ileri gideceğimi bilmiyorum, bu yüzden herhangi biri gerekli kodu sağlayabilirse çok yardımcı ol.

  • İki işlem açıkken biri stoploss'a ulaştığında, karını belirli bir miktarda artırmak için hala açık olan diğer ticarete ihtiyacım var.
  • Cuma 23:00 hala istemediğim işlemler açılıyor.
  • Saat 23:00'e kadar açık olan tüm işlemler, zararda veya kârda olmasına bakılmaksızın kapatılmalıdır.

MQL'de acemiyim ve yukarıdaki sorunlardan bazılarının çözümlerini aramaya çalıştım ve onları bulmakta sorun yaşıyorum. Çok fazla karmaşık kodlama gerektirmeden sorunların kolayca çözülebileceğine inanıyorum. Birisi bana yukarıdaki sorunlardan herhangi birine bir çözüm veya çözüm sağlayabilirse, bir kez daha çok minnettar olurum.

Teşekkürler,

madmax3

 

...

Bunun gibi bir şey deneyin:

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

int ticketBuy = OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Co mm,0,0,CLR_NONE);

if (ticketBuy>-1)

OrderModify(ticketBuy,OrderOpenPrice(),stopLossToUse,takeProfitToUse,0,CLR_NONE);

}

Sadece stopLossToUse ve TakeLossToUse'u olmasını istediğiniz değerlerle değiştirin

kasio:
Arkadaşlar,

MQL4 programlamasında acemiyim ve bir ECN komisyoncusu ile bir SİPARİŞE SL & TP eklemek için yardıma ihtiyacım var.

Başlangıçta, birisi SİPARİŞLEREND içindeki StopLoss & TakeProfit alanını "0" olarak ayarlaması gerektiğini, aksi takdirde bir ECN/STP komisyoncusunun yapmayacağını belirtene kadar SL ve TP'lerin neden siparişimi bir hatayla sonuçlandırdığını anlayamadım. emri yerine getirin.

Öyleyse sorum şu: Market'te bir emri nasıl uygulayabilirim ve ardından hemen (veya bir veya iki saniye içinde) o bilete bir SL/TP ekleyebilirim?

İşte benim questino ile ilgili kodun bir parçası:

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Comm,0,0,CLR_NONE);

Harekete Geç=0;

}

Herhangi biri, bu belirli bilete isteğe bağlı olarak 25 piplik bir TP/SL ekleyebilmem için OrderSend komutundan hemen sonra kod eklememe yardımcı olabilir mi?

Herhangi bir yardım çok takdir edilecektir. Şimdiden teşekkürler.

Saygılarımızla,

kasio
 

Yardım!

Birisi bu göstergeyi yeniden boyamamak için yapmama yardım edebilir mi lütfen?

Dosyalar:
pi_bg_v2.mq4  3 kb
 

...

Bu, derlenmiş bir koddur, ancak yine de şu konuya bakın: https://www.mql5.com/en/forum/179650

Yeniden adlandırılan bir güneş rüzgarı, yani ...

phoenix:
Birisi bu göstergeyi yeniden boyamamak için yapmama yardım edebilir mi lütfen?
 

Gönderdiklerimin nasıl kodlanacağına dair bir fikriniz var mı? Sabırsız davrandıysam özür dilerim, sadece okunup okunmadığını bilmek istiyorum.

Teşekkürler,

madmax3

 

...

start() prosedürünün başında EA'nıza şöyle bir şey ekleyin:
if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); } [/PHP]

Bunu koda ekleyin:

[PHP]CloseAll() geçersiz

{

for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

(OrderMagicNumber()!=MagicNumber) devam ederse;

//

//

//

//

//

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

for(int c=0; c<3;c++)

{

Yenileme Oranları();

if (OrderType()==OP_BUY)

{ çift cp = Teklif;}

başka { cp = Sor;}

OrderClose(OrderTicket(),OrderLots(),cp,0,Sarı);

int err=GetLastError();

if(err==4 || hata==136 || hata==137 || hata==138 || hata==146)

{

Uyku(5000); devam etmek;

}

kırmak;

}

kırmak;

}

}

}

Bu, 2. ve 3. puanlarınızı çözecektir (Cuma günü açılan siparişler)

İlk noktayı kodlamak oldukça karmaşıktır - muhtemelen bu kuralı yeniden tanımlamanız gerekecek

madmax3:
Gönderdiklerimin nasıl kodlanacağına dair bir fikriniz var mı? Sabırsız davrandıysam özür dilerim, sadece okunup okunmadığını bilmek istiyorum.

Teşekkürler,

madmax3
 

Lütfen yardım et! Hata numarası = 4103. konum = 10. Dosya Açılamıyor

Merhaba,

Burada yeniyim ve MT programlamada da yeniyim. bana bu konuda birileri yardımcı olabilir mi?

"Bir hata oluştu. Hata numarası = 4103. pos = 10 (dosya açılamıyor) mesajı aldım."

Dosya gif olarak doğru şekilde kaydedildi ancak yukarıdaki mesajı alıyorum. Sorun nerede?

kod:

void Ekran Görüntüsü(int bilet, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

Yenileme Oranları();

if (cmd==OP_BUY) Yorum (DateTimeInfo(),"\n","Sipariş Açma Zamanı: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Satın Al: ",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Yorum (DateTimeInfo(),"\n","Sipariş Açma Zamanı: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell: ",DoubleToStr(orderOpenPrice,Digits) );

string dosya adı = Symbol()+"_"+"Demo"+"_"+ticket+"_Open.gif";

int tanıtıcı = FileOpen(dosyaadı,FILE_CSV|FILE_READ);

if(işlem<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(dosya adı,900,600)) Print("WindowScreenShot hatası: "+GetLastError());

}

}

başka FileClose(tutamaç);

}

Herhangi bir yardım takdir edilmektedir. Teşekkür ederim.

 

...

Tamam çalışıyor

Dosya uzmanlar\files alt klasöründe olmalı ve örnek bilet numarası olarak 0 kullandım, bu nedenle tam dosya adı "EURUSD_Demo_0_Open.gif" örneğimdeydi ve sorunsuz açtı (eğer yaparsan sorun yok) FILE_CSV ve FILE_BIN ile birlikte kullanın). Bu nedenle, doğru klasöre ve doğru adla kaydedilmişse, kodunuz iyi çalışır.

Akkinmore:
Merhaba,

Burada yeniyim ve MT programlamada da yeniyim. bana bu konuda birileri yardımcı olabilir mi?

"Bir hata oluştu. Hata numarası = 4103. pos = 10 (dosya açılamıyor) mesajı aldım."

Dosya gif olarak doğru şekilde kaydedildi ancak yukarıdaki mesajı alıyorum. Sorun nerede?

kod:

void Ekran Görüntüsü(int bilet, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

Yenileme Oranları();

if (cmd==OP_BUY) Yorum (DateTimeInfo(),"\n","Sipariş Açma Zamanı: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Satın Al: ",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Yorum (DateTimeInfo(),"\n","Sipariş Açma Zamanı: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell: ",DoubleToStr(orderOpenPrice,Digits) );

string dosya adı = Symbol()+"_"+"Demo"+"_"+ticket+"_Open.gif";

int tanıtıcı = FileOpen(dosyaadı,FILE_CSV|FILE_READ);

if(işlem<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(dosya adı,900,600)) Print("WindowScreenShot hatası: "+GetLastError());

}

}

başka FileClose(tutamaç);

}

Herhangi bir yardım takdir edilmektedir. Teşekkür ederim.
 
mladen:
TAMAM Çalışıyor Dosya uzmanlar\files alt klasöründe olmalı ve örnek bilet numarası olarak 0 kullandım, bu yüzden tam dosya adı örneğimde "EURUSD_Demo_0_Open.gif" vardı ve sorunsuz açtı (bunu yapıyor) Tamam, FILE_BIN'in yanı sıra FILE_CSV kullanıyorsanız). Bu nedenle, doğru klasöre ve doğru adla kaydedilmişse, kodunuz iyi çalışır.

Teşekkürler. Evet, dosya doğru klasöre ve doğru ada kaydedilir. Hata mesajının tekrar görünüp görünmediğini kontrol etmek için FILE_CSV yerine FILE_BIN kullanmayı deneyebilirim.

 

...

Bilgisayarımın göstergelerde Rusça kelimeleri doğru bir şekilde göstermesini nasıl sağlayabilirim?...Teşekkürler...