MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 306

 
Alexey Viktorov :

Ve başkası olamaz. Hiçbir bilgisayar 1970'den daha az bir yıl bilemez. Aracı tarafından listelenen yılla başlayın.

Anladım. Teşekkür ederim.
 
Aleksey Vyazmikin :

MT5'teki kod

Sonuç:


ZY: Kod değişti - o ME'den değil.

Ne amaçladığını hemen anlamadım. Bunu mql5'te yapmadım, çözmem gerekecek. Ancak mql4'te şöyle bir şey yapabilirsiniz:

2 ek arabellek daha alın.

Ofsetlerini N çubuklara ayarlayın ve bu N çubukları ana arabelleklerin son değeriyle doldurun.

Ve elbette, bu ek tamponların N+1 indeksi boş bir değerle doldurulmalıdır.

 
Alexey Viktorov :

Ne amaçladığını hemen anlamadım. Bunu mql5'te yapmadım, çözmem gerekecek. Ancak mql4'te şöyle bir şey yapabilirsiniz:

2 ek arabellek daha alın.

Ofsetlerini N çubuklara ayarlayın ve bu N çubukları ana arabelleklerin son değeriyle doldurun.

Ve elbette, bu ek tamponların N+1 indeksi boş bir değerle doldurulmalıdır.


Fikir için teşekkürler - Bunu başlangıçta MT5'te yaptım, sonra optimize ettim.

Genel olarak, saat 4'te yatağa gittim (tabii ki genel kod tamamlanmadı), ancak istediğimi iki tamponla yaptım.

Sorun, MT5'te doldurmanın soldan sağa, MT4'te ise tam tersi olmasıydı. ArraySetAsSeries işlevi yardımcı olmadı - aslında tüm mantığı yeniden yazdım.

 

İyi günler Artem!

TrExp_Nik vers'deki değişiklikimle ilgili yardım istemek istiyorum. MQL 4 kitabından alınan Expert Advisor'ın standart kodundan 4. Başabaşa geçiş yeteneği eklemek istiyorum ancak sınırlı programlama yeteneklerimden dolayı bu mümkün değil. Kodunu Expert Advisor'a entegre etmeye çalıştığım e-MovingInWL'yi temel almaya karar verdim, ancak değişkenleri doğru bir şekilde birleştiriyor veya ikinci başabaş Expert Advisor kodunu yanlış anlıyorum. Belki de bu en iyi seçenek değildir. O zaman nasıl daha iyi veya daha kolay yapılabileceği konusunda tavsiye almak istiyorum.

Dosyalar:
 
niktach :

İyi günler Artem!

TrExp_Nik sürümlerinde yaptığım değişiklikle ilgili yardım istemek istiyorum. MQL 4 kitabından alınan Expert Advisor'ın standart kodundan 4. Başabaşa geçiş yeteneği eklemek istiyorum ancak sınırlı programlama yeteneklerimden dolayı bu mümkün değil. Kodunu Expert Advisor'a entegre etmeye çalıştığım e-MovingInWL'yi temel almaya karar verdim, ancak değişkenleri doğru bir şekilde birleştiriyor veya ikinci başabaş Expert Advisor kodunu yanlış anlıyorum. Belki de bu en iyi seçenek değildir. O zaman nasıl daha iyi veya daha kolay yapılabileceği konusunda tavsiye almak istiyorum.

Tünaydın. Tam olarak ne yapmaya çalışıyordun? Sadece iki ekli kod görüyorum. Sizin için her şeyi yapacak birine ihtiyacınız varsa, serbest çalışma bunun içindir.

Ve kendiniz deniyorsanız, tam olarak ne yaptığınızı ve nerede anlamadığınızı gösterin.

 

Merhaba,

Grafiğe yerleştirilen "üçgen" grafik nesnesinin özelliklerine bir şekilde programlı olarak ulaşmak mümkün müdür? Bu, özellikler formunu etkileşimli olarak açarken "Parametreler" sekmesinde görüntülenen zirvelerin zaman ve fiyat koordinatlarını ifade eder. ObjectGetInteger ve ObjectGetDouble işlevlerini kullanmayı denedim, ancak onların yardımıyla yalnızca bir köşe için veri alabiliyorum.

Teşekkür ederim.

 
oddball :

Merhaba,

Grafiğe yerleştirilen "üçgen" grafik nesnesinin özelliklerine bir şekilde programlı olarak ulaşmak mümkün müdür? Bu, özellikler formunu etkileşimli olarak açarken "Parametreler" sekmesinde görüntülenen zirvelerin zaman ve fiyat koordinatlarını ifade eder. ObjectGetInteger ve ObjectGetDouble işlevlerini kullanmayı denedim, ancak onların yardımıyla yalnızca bir köşe için veri alabiliyorum.

Teşekkür ederim.

Yapabilir. Ve düşünce yönü doğru. Parametreleri nasıl almaya çalıştığını göster?

 
Artyom Trishkin :

Biletle sipariş seçerken havuz belirtmeniz gerekmez - MODE_TRADES burada gereksizdir - biletle seçim yaparken bu parametre yok sayılır ve sipariş iki listeden birinden seçilir - kapalı listeden veya listeden piyasa pozisyonlarının sayısı - pozisyonun kapalı olup olmadığına veya başka bir şeye bağlı olarak hayır.

Biletle bir siparişi başarıyla seçtikten sonra, siparişin iki listeden hangisinden seçildiğini anlamak için pozisyon kapanış saatini kontrol etmeniz gerekir - sıfırdan büyükse, sipariş zaten kapatılmıştır ve sipariş seçilmiştir. geçmiş siparişlerin listesi, aksi takdirde sipariş hala piyasada.

Ancak hatanızın ne olduğunu anlamak için kodu eklemelisiniz - daha fazla bilgi verin, çünkü bu satırda prensipte hata yoktur (fonksiyonun dönüş sonucunu kontrol etmemeniz dışında, yok sayılan değiştiriciyi kullanın) bu durumda ve kapanış parantezinden sonra ";" yok).


Cevap için çok teşekkür ederim.

Bütün fonksiyon bu, mesele şu ki, bir emir açar ve daha sonra modifikasyon yoluyla, sabit zararı durdur ve kar değerleri ekler.

Yani emir açılıyor ama zararı durdur ve cari kar düşmüyor (hesaplama fonksiyonunu kırmızı ile vurguladım, burada OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES) hata veriyor ((( )

// emir açma fonksiyonu, değişkenler: sembol, emir tipi, lot, açık fiyat, TP ve SL hesaplama yöntemi (0 - fiyatta set, 1 - açık fiyattan hesaplanacak puanlarda set), zararı durdur, kar al )

//Sembol/Çift, açık emir tipi - beklemede, Açık fiyat, Anahtar = 1, SL B TP - zararı durdur ve kar al değerleri sabittir!!!

bool SendOrder(string Symb,int Type, double OP,int Mode) {
renk CL;
double Pp = MarketInfo(Symb, MODE_POINT);
if (Tür==0) CL=Mavi;
if (Tür==1) CL=Kırmızı;
if (Tür==2 || Tür==4) CL=KoyuTurkuaz;
if (Tür==3 || Tür==5) CL=Turuncu;
// ses kontrolü
if(MarketInfo(Symb,MODE_LOTSTEP)==0.01) DG=2; başka DG=1;
if (Lot<MarketInfo(Symb,MODE_MINLOT)) Lot=MarketInfo(Symb,MODE_MINLOT);
if (Lot>MarketInfo(Symb,MODE_MAXLOT)) Lot=MarketInfo(Symb,MODE_MAXLOT);
if (Lot*MarketInfo(Symb,MODE_MARGINREQUIRED)>AccountEquity()) {
PnC(StringConcatenate("Anlaşma açmak için yeterli para yok",Type," volume: ",DoubleToStr(Lot,DG))),0);
dönüş;
}
// bekleyen siparişler kontrol ediliyor
/*
double Slv = MarketInfo(Symb,MODE_STOPLEVEL)*Pp;
if (Tür>1) {
if (Type==2 && MarketInfo(Symb,MODE_ASK)-OP<Slv) OP=MarketInfo(Symb,MODE_ASK)-Slv;
if (Type==3 && OP-MarketInfo(Symb,MODE_BID)<Slv) OP=MarketInfo(Symb,MODE_BID)+Slv;
if (Type==4 && OP-MarketInfo(Symb,MODE_ASK)<Slv) OP=MarketInfo(Symb,MODE_ASK)+Slv;
if (Type==5 && MarketInfo(Symb,MODE_BID)-OP<Slv) OP=MarketInfo(Symb,MODE_BID)-Slv;
}
*/
Yeniler();
int Min_Dist = MarketInfo(Symb,MODE_STOPLEVEL); //Puan olarak izin verilen minimum zarar durdurma/kar alma seviyesi. Min. mesafe
double Tek_Ask = MarketInfo(Symb,MODE_ASK); //Son alınan satış fiyatı. Geçerli sembol için önceden tanımlanmış Ask değişkeninde saklanır.
double Tek_Bid = MarketInfo(Symb,MODE_BID); //Son alınan teklif fiyatı. Mevcut araç için, önceden tanımlanmış Bid değişkeninde saklanır.
double Tek_Point = MarketInfo(Symb,MODE_POINT); //Teklif para biriminde punto boyutu. Mevcut takım için önceden tanımlanmış değişken Noktada saklanır
int Tek_Digits = MarketInfo(Symb,MODE_DIGITS);//Enstrüman fiyatındaki ondalık noktadan sonraki basamak sayısı. Mevcut enstrüman için önceden tanımlanmış değişken Basamaklarda saklanır

double Slv = NormalizeDouble(Min_Dist*Tek_Point,Tek_Digits);
if (Tür>1) {
if (Type==2 && Tek_Ask - OP < Slv) OP = Tek_Ask - Slv;
if (Type==3 && OP - Tek_Bid < Slv) OP = Tek_Bid + Slv;
if (Type==4 && OP - Tek_Ask < Slv) OP = Tek_Ask + Slv;
if (Type==5 && Tek_Bid - OP < Slv) OP = Tek_Bid - Slv;
}
// durakları kontrol etme
if (SL!=0 || TP!=0) {
if (Mod==0) {
if (MathAbs(OP-SL)<Slv && SL!=0) {
if (Tür==0 || Tür==2 || Tür==4) SL=OP-Slv; başka SL=OP+Slv;
}
if (MathAbs(OP-TP)<Slv && TP!=0) {
if (Tür==0 || Tür==2 || Tür==4) TP=OP+Slv; başka TP=OP-Slv;
}
}başka{
if (SL*Pp<Slv && SL!=0) SL=Slv/Pp;
if (TP*Pp<Slv && TP!=0) TP=Slv/Pp;
}
}
// açık
for(int k=0;k<=TryToTrade;k++) {
if (Tür==0) OP=MarketInfo(Symb,MODE_ASK);
if (Tür==1) OP=MarketInfo(Symb,MODE_BID);
PnC(StringConcatenate("Sipariş açma girişimi, şunu yazın: ",Tür," hacim: ",Lot," fiyat: ",OP),0);
if (IsTradeAllowed()) {
int Ticket=OrderSend(Symb,Type,Lot,NormalizeDouble(OP,MarketInfo(Symb,MODE_DIGITS)),3,0,0,NULL,Tek_Magic,0,CL);
}else{ PnC(StringConcatenate("Sipariş açılamıyor",k),0); uyku(3000); devam etmek; }
if (Ticket >= 0) { PnC(StringConcatenate("Sipariş açık",Ticket),0); kırmak; }
LastError=Fun_Error(GetLastError());
if (LastError==0) {
Yeniler(); Uyku(Bekleme Süresi);
if (k==TryToTrade) return(false); }
if (LastError==1) return(false);
if (LastError==2) { İş=yanlış; dönüş(yanlış); }
}
// durakları ayarla
OrderSelect(Bilet,SELECT_BY_TICKET,MODE_TRADES);
if (SL==0 && TP==0) döner;
if (Mod==1) {
if (SL!=0) {
if (Tür==0 || Tür==2 || Tür==4) SL=OrderOpenPrice()-SL*Pp;
if (Tür==1 || Tür==3 || Tür==5) SL=OrderOpenPrice()+SL*Pp;
}
if (TP!=0) {
if (Tür==0 || Tür==2 || Tür==4) TP=OrderOpenPrice()+TP*Pp;
if (Tür==1 || Tür==3 || Tür==5) TP=OrderOpenPrice()-TP*Pp;
}
}

for(k=0;k<=TryToTrade;k++) {
PnC(StringConcatenate("Siparişte durak ayarlamaya çalışılıyor: ",Ticket," s/l: ",SL," t/p: ",TP),0);
if (IsTradeAllowed()) {
//TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(),MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(Symb,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(SyGITS),C0,DI ;
TicketT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(),MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(SL,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb_,MODE_0));
}else{ PnC(StringConcatenate("Sıra değiştirilemez ",k),0); uyku(3000); devam etmek; }
if (TiceT == true) { PnC(StringConcatenate("Modified order ",Ticket),0); kırmak; }
LastError=Fun_Error(GetLastError());
if (LastError==0) {
Yeniler(); Uyku(Bekleme Süresi);
if (k==TryToTrade) return(false); }
if (LastError==1) return(false);
if (LastError==2) { İş=yanlış; dönüş(yanlış); }
}
dönüş(doğru);

}

 

Bir siparişi değiştirirken neden 131 " yanlış hacim " hatası aldığımı açıklayan var mı?

Depozito normal olarak açılır, lot normalleşir, yazdırırken minimum lot 0.01'dir, bu benim hacmimden daha az değildir (demo hesabı)

Forumdaki her şeyi okudum ve sorunun ne olduğunu bulamadım!!!

Ortaya çıkan ve tarif edilmeyen gizli sıkıntılara şaşırmaktan asla vazgeçmiyorum.
 
forexman77 :

Bir siparişi değiştirirken neden 131 " yanlış hacim " hatası aldığımı açıklayan var mı?

Depozito normal olarak açılır, lot normalleşir, yazdırırken minimum lot 0.01'dir, bu benim hacmimden daha az değildir (demo hesabı)

Forumdaki her şeyi okudum ve sorunun ne olduğunu bulamadım!!!

Ortaya çıkan ve tarif edilmeyen gizli sıkıntılara şaşırmaktan asla vazgeçmiyorum.

Başka bir DC'de denedim, her şey yolunda görünüyor. Soru, neden o zaman ararken:

 double MinLot = MarketInfo ( Symbol (), MODE_MINLOT );
double MaxLot = MarketInfo ( Symbol (), MODE_MAXLOT );
Alert ( "MinLot=" ,MinLot, "MaxLot=" ,MaxLot);  

0,01 yazdırıyor, ancak botta 131 yazdırıyor mu?