MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 938
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Böyle bir soru: Double'lerin 0'dan 4'e, datatame'in 5'ten 9'a, int'nin 10'dan 14'e kadar saklanacağı tek boyutlu bir dizi oluşturmak istiyorum. Bunu mql4'te düzenlemek mümkün mü, eğer öyleyse, bana nasıl olduğunu gösterin, yapılarla bir örnek gördüm, ancak c++'daydı, ancak sitenin bağlantısını kaybettim?
Her tür için belirli dizi hücreleriniz varsa, dizi yerine bir yapı yapın.
Her tür için belirli dizi hücreleriniz varsa, dizi yerine bir yapı yapın.
ne yazık ki görevi resmileştiremiyor bile
bir yandan, iletişim C++ / MQL'de katı yazımdan uzaklaşmak istiyor gibi görünüyor, burada bir tartışma ile iyi bir konu, ancak bunun ona yardımcı olacağından şüpheliyim https://www.mql5.com/ru/ forum/294094
tartışma sırasında (bence 3 aydır devam ediyor mu? ) sürekli olarak @Seric29'un fonksiyon imzasının tanımından uzaklaşması ve bir tür "hayalet" fonksiyon alması gerektiği ortaya çıkıyor. içine isteğe bağlı sayıda parametre iletebileceğiniz
daha sonra tartışma sırasında tüm bunlara çok boyutlu dinamik dizilerin katılması gerektiği ve bu dizilerin fonksiyona parametre olarak geçirilmesi gerektiği ortaya çıktı.
onlar. çözümü sürekli olarak "yerden gelen çığlıklar" ile biten resmi bir görev yok, geliştiriciler bir şeyin işlevselliğini azalttı ve bana döngü operatörlerinin kaynak kodlarını verdi, onları yeniden yapacağım, o zaman işte burada sonuncusu:
mql4 geliştiricilerine nasıl mektup yazılır, derleyici kodu nasıl görülür, bu kadar statik olmaması için ona ek özellikler eklemek mümkün müdür?
... genel olarak, böyle bir şey ... "beyin alınması" ifadesi söylenebilecek en az şey))))
Bu yüzden detay vermiyorum.
Temel bilgileri öğrenmekten kaçış yok.
Temel bilgileri öğrenmekten kaçış yok.
Burada ilginç olan, bir kişinin temel bilgileri öğrenmemesi, ancak tüm bunları zaten bildiğini göstermeye çalışması ve tüm meta alıntılar onun işini yapmasını engelliyor)
Burada ilginç olan, bir kişinin temel bilgileri öğrenmemesi, ancak tüm bunları zaten bildiğini göstermeye çalışması ve tüm meta alıntılar onun işini yapmasını engelliyor)
Selamlar. Yetkili bir video izledim "MQL4'ten MQL5'e - Metatrader 5 için Uzman Danışman nasıl yeniden yazılır".
Yazara büyük saygılar. Kendim denemeye karar verdim. yazdı. Fikir şu:
1. Girişlerde dtriger = 1 ayarladım - Buy açılır.
2. Girişlerde dtriger = -1 ayarladım - Satış açılır.
3. Girişlerde dtriger = 0 olarak ayarladım - tüm açık olanlar kapalı.
MT5'te zıt pozisyonları tutmanın mümkün olmadığını yardım sayfalarında okudum,
ve bende onlara sahibim.
Soru: mevcut pozisyonun kapanışı ne zaman doğru bir şekilde kaydedilir?
açma dönüşü (ters).
Çok teşekkürler.
#include <Ticaret\PositionInfo.mqh>
#include <Ticaret\Ticaret.mqh>
#include <Ticaret\SymbolInfo.mqh>
#include <Ticaret\OrderInfo.mqh>
cPositionInfo o_position;
CTrade o_trade;
CSymbolInfo o_symbol;
COorderInfo o_order;
giriş int tetik = 0;
giriş çift StartLot = 0.01;
giriş çift lpos_volume = 1.0;
giriş intStep = 10;
giriş int MagicNumber = 12345; // Sihirli nuaber
giriş int kayması = 30; // kayma
int tetikleyici;
int dStep;
//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
int OnInit()
{
dAdım = adım ;
tetikleyici = tetikleyici;
if (!o_symbol.Name(Symbol()))
dönüş(INIT_FAILED);
Yeniler();
o_trade.SetExpertMagicNumber(MagicNumber) ;
if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK))
{
o_trade.SetTypeFilling(ORDER_FILLING_FOK);
}
else if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC))
{
o_trade.SetTypeFilling(ORDER_FILLING_IOC);
}
başka
{
o_trade.SetTypeFilling( ORDER_FILLING_RETURN );
}
o_trade.SetDeviationInPoints(Kayma);
if (o_symbol.Digits() == 3 || o_symbol.Digits() == 5 )
{
dAdım = 10 ;
}
dönüş(INIT_SUCCESSED);
}
//+------------------------------------------- --------------------+
//| Uzman başlatmasızlaştırma işlevi |
//+------------------------------------------- --------------------+
geçersiz OnDeinit(const int nedeni)
{
}
//+------------------------------------------- --------------------+
//| Uzman onay işlevi |
//+------------------------------------------- --------------------+
geçersiz OnTick()
{
tarihsaat lpos_time = 0;
çift lpos_price_open = 0.0;
ENUM_POSITION_TYPE lpos_type = -1;
int konum_sayısı = 0;
çift toplam_kâr = 0;
for (int i = PositionsTotal() - 1; i>=0; i--)
{
if (o_position.SelectByIndex(i))
{
if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
if (o_position.Time() > lpos_time)
{
lpos_time = o_position.Time(); //SiparişAçıkZamanı();
lpos_price_open = o_position.PriceOpen(); //SiparişAçıkFiyat();
lpos_type = o_position.PositionType() ; //Sipariş türü();
}
pos_count++;
sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit() ;
}
}
}
// Bekleyen siparişlerin sayısını sayın
int stop_count=0;
for (int i=OrdersTotal()-1; i >=0; i--)
{
if (o_order.SelectByIndex(i))
{
if (o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
stop_count++;
}
}
if (! Yenileme Oranları())
dönüş;
if(dtrigger == 0 )
{
Hepsini kapat();
dönüş;
}
// + ----- İlk siparişi aç ++++++++++
if (pos_count == 0 && stop_count == 0 )
{
if ( dtriger == -1 && lpos_type != POSITION_TYPE_SELL)
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // SEL L 11111
}
if ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // BU Y 11111
}
}
// + ----- Çevir ++++++++++++++++++++++++++++++++
eğer (pos_count>0)
{
if(lpos_type == POSITION_TYPE_BUY )
{
if ( dtriger == -1 )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // SEL L +++++
}
}
if (lpos_type==POSITION_TYPE_SELL )
{
if ( tetik == 1 )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // BU Y +++++
}
}
}
if(pos_count>0 && stop_count>0)
DeleteStopOrders() ;
}
//------------------------------------------------ -----------
bool YenilemeOranları()
{
if (!o_symbol.RefreshRates())
dönüş(yanlış);
if (o_symbol.Ask() == 0 || o_symbol.Bid() == 0)
dönüş(yanlış);
dönüş(doğru);
}
//--- ------------------------------------------------ --------- ------------
bool IsFillingTypeAllowed (dize sembolü, int fill_type)
{
int doldurma = (int)SymbolInfoInteger(sembol, SYMBOL_FILLING_MODE);
dönüş((doldurma && dolgu_türü) == dolgu_türü) ;
}
// ------------------------------------------------ --
Tümünü Kapat() geçersiz
{
for (int dizin = PositionsTotal()-1; dizin >=0; dizin--)
{
if (o_position.SelectByIndex(index))
{
if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
o_trade.PositionClose(o_position.Ticket());
}
}
}
}
//------------------------------------------------ -----------
// Bekleyen tüm siparişleri sil
//------------------------------------------
geçersiz DeleteStopOrders()
{
for (int i = OrdersTotal() - 1; i >= 0; i-- )
{
if (o_order.SelectByIndex(i))
if(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
o_trade.OrderDelete(o_order.Ticket());
}
}
//+------------------------------------------- --------------------+
Selamlar....
Lütfen kodu doğru yapıştırın:
Lütfen kodu doğru yapıştırın:
En azından C++ ile ilgili bir kitap okumaya başlayın, sorularınız beyin patlaması, teknik terimler yazıyorsunuz, ilk bakışta belirli bir soru soruyormuşsunuz gibi görünüyor ama aslında özü anlamadan sadece terimlerle işlem yapıyorsunuz.. .. makro ne döndürecek ? nereye dönecek? makronun gövdesinde yeniden yüklenebilir bir fonksiyon var.... Sorunuzun neye benzediğini bile açıklayamıyorum.
Makronun ne olduğunu anlamak için bu terimi doğru yazın, makro İkamesi ne olduğunu anlamanız belki daha kolay olur
mql4'te C++'ın olanakları da kesilir, başka bir deyişle, dil çok statiktir. Fikrimin başarısız olduğunu söyleyebiliriz, sınıflar olmadan basit bir aşırı yükleme yazdım, argümanlar ekledim ve onlara 0 atadım, bir makroda çağırmaya çalıştım, 3 fonksiyon var hatası aldım, yani. Hangisini arayacağını ve daha sonra hangi taşlarla karşılaşacağım konusunda nasıl sessiz kaldığımı hala boyaman gerekiyor. Muhtemelen hiçbir şey yapmamak daha iyidir, o zaman yanlış gidemezsin.
mql4'te C++'ın olanakları da kesilir, başka bir deyişle, dil çok statiktir.
özellikle ne kesildi?
başka bir deyişle, gerekli değildir, özellikle Google bile “ çok statik bir dil” bilmediğinden, C ++ başlangıçta statik olarak yazılmış bir dildir ve düşünceler anlamsızdır - aynen böyle
Muhtemelen hiçbir şey yapmamak daha iyidir, o zaman yanlış gidemezsin.
Kısa RTFM olacağım ( lurkmore )
Tamamen estetik bir soru.
Burada kendi resmimi nasıl yapabilirim? MT4