Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 1100
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
Sevgili programcılar, lütfen aynı anda birden fazla işlem dizisi açma yasağının oluşturulmasına yardımcı olun (bir seri, emrin zararda veya sıfırda kapanması ve ardından aynı enstrüman için bir sonraki işlemin açılmasıdır, ancak artırılmış bir lot), yani bir dizi işlem açılırsa ikincisi ve sonraki işlem diğer enstrümanlar için yasaklanır (bot aynı anda farklı enstrümanlar üzerinde çalışır). Bunun terminalin global değişkeni üzerinden yapılması gerektiğini düşünüyorum ancak yeterli bilgi ve tecrübeye sahip değilim, MQL öğrenmeye yeni başladım. Bu bir ikili opsiyon danışmanıdır. İşte kod
dış çift Lot = 1; // Çok güzelsin
harici intExp = 1; // Son
harici int Bekle = 1; // Bir yöndeki mum sayısı
extern int Zaman Aşımı = 1; // Zaman aralığı
dış çift Çarpan = 3; // Çarpan
dış int kayma = 5; // kayma
harici int Büyü = 2090; // Büyü
int bilet, Tür;
çift fiyat, çok;
//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
int OnInit()
{
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()
{
// --------------- İşlemlerin açılması ---------------
if (OrdersTotal() == 0) // Sipariş sayısı sıfıra eşit olmalıdır
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
// Son anlaşma kârsızsa, aynısı açılır, ancak artan lotla
{
Tür = TypeLastHistOrder();
if (Tip == OP_BUY) Fiyat = Sor;
if (Tür == OP_SELL) Fiyat = Teklif;
Parti = NormalizeDouble(LotsLastHistOrder()*Çarpan, 2);
bilet = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// Son ticaretin karı sıfırsa, aynısını aç
{
Tür = TypeLastHistOrder();
if (Tip == OP_BUY) Fiyat = Sor;
if (Tür == OP_SELL) Fiyat = Teklif;
Parti = NormalizeDouble(LotsLastHistOrder(), 2);
bilet = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > FiyatOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// Son işlem karlıysa, sipariş açılır
{
if (SignalBuy() && OrdersTotal() == 0)
{
bilet = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (SignalSell() && OrdersTotal() == 0)
{
bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
Yorum ("PriceCloseLastHistOrder(OP_BUY)= ", PriceCloseLastHistOrder(OP_BUY), "PriceCloseLastHistOrder(OP_SELL)=",
FiyatCloseLastHistOrder(OP_SELL) );
}
}
}
}
//+------------------------------------------- --------------------+
int CountTrades(int type = -1) // İşlem sayısını belirleme
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--) // Döngü kesinlikle tüm açık siparişlerden geçer, i -- siparişin seri numarası
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Fonksiyon, piyasada i sıralı bir emir olup olmadığını kontrol eder,
// varsa aşağıdaki koşullar kontrol edilir...
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)) // Eğer Symbol,
// emrin açıldığı, mevcut sembole eşittir ve emrin büyüsü, mevcut danışmanın ayarlarındaki sihire eşittir ve
// sipariş türü eşittir değer türü (veya tür == -1 (siparişleri saymak için hangi türün gerekli olduğu önemli değilse))
cnt++; // cnt değişkenine 1 eklenir ve döngünün sonunda cnt zaten işlem sayısına eşit olur,
// belirli bir türdeki cari döviz çifti için cari danışman tarafından açılır
}
}
dönüş(cnt); // cnt değişkeninin değerini döndürür
}
//+------------------------------------------- --------------------+
int CountHistTrades(int tipi = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++;
}
}
dönüş(cnt);
}
//+------------------------------------------- --------------------+
bool SignalBuy()
{
for (int i=1; i<=Bekle; i++)
{
if (Close[i] > Open[i]) return(false);
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Bekle || (Bekle == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
dönüş(yanlış);
}
//+------------------------------------------- --------------------+
bool SignalSell()
{
for (int i=1; i<=Bekle; i++)
{
if (Kapat[i] < Aç[i]) dönüş(yanlış);
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Bekle || (Bekle == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
dönüş(yanlış);
}
//+------------------------------------------- --------------------+
tarihsaat TimeLastHistOrder(int tipi = -1)
{
tarihsaat sonzaman = 0;
tarihsaat açıksaat=0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > geçen sefer)
{
lasttime = OrderCloseTime();
açılış zamanı = OrderOpenTime();
}
}
}
}
dönüş (açık zaman);
}
//+------------------------------------------- --------------------+
intTypeLastHistOrder()
{
tarihsaat = 0;
int türü = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > zaman)
{
zaman = OrderCloseTime();
type = OrderType();
}
}
}
}
dönüş(tür);
}
//+------------------------------------------- --------------------+
double LotsLastHistOrder(int tipi = -1)
{
tarihsaat = 0;
çift lot = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderOpenTime() > zaman)
{
zaman = OrderOpenTime();
lot = OrderLots();
}
}
}
}
dönüş(lot);
}
//+------------------------------------------- --------------------+
double PriceCloseLastHistOrder(int tipi = -1)
{
tarihsaat = 0;
çift fiyat = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > zaman)
{
zaman = OrderCloseTime();
fiyat = OrderClosePrice();
}
}
}
}
iade(fiyat);
}
//+------------------------------------------- --------------------+
double PriceOpenLastHistOrder(int tipi = -1)
{
tarihsaat = 0;
çift fiyat = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > zaman)
{
zaman = OrderCloseTime();
fiyat = OrderOpenPrice();
}
}
}
}
iade(fiyat);
}
//+------------------------------------------- --------------------+
Programlama yaparken bir sorum vardı: Expert Advisor'da sunucu zamanını milisaniye hassasiyetinde bir şekilde almak mümkün müdür?
Örneğin, şunu elde ederiz: 09/23/2016 14h. : 53dk : 54000 milisaniye? Bu tam olarak 54 saniye, 000 m/sn.
Merhaba meslektaşlarım!
Programlama yaparken bir sorum vardı: Expert Advisor'da sunucu zamanını milisaniye hassasiyetinde bir şekilde almak mümkün müdür?
Örneğin, şunu elde ederiz: 09/23/2016 14h. : 53dk : 54000 milisaniye? Bu tam olarak 54 saniye, 000 m/sn.
İlgi Sor. Ne demek istiyorsun , sunucunun bilinen son saatini, son alıntı TimeCurrent()'in varış saatini veya sunucudaki geçerli saati belirtin?
Eğer TimeCurrent() ise, yeni bir alıntıya sahip bir paketin İnternet üzerinden sunucudan terminale 10-500 ms içinde seyahat ettiği ve bu sürenin paketten pakete değiştiği göz önüne alındığında, bunun kullanımı nedir. Ek olarak, son teklifin gelişinin ne olduğu kesin değildir, birkaç kaynaktan sunucuya giderlerse, likidite sağlayıcıları, daha sonra işlenir, ardından sunucu yeni bir onay gönderir. Ayrıca sunucunun sistem zamanlayıcısının astronomik zamanla nasıl senkronize olduğu da bilinmiyor. 01/09/2014 04:15 - 06:15 Moskova saati (Perşembe, işlem günü) Bunu astronomik değil, 31 şirket ortalamasından bir sapma olarak anladım. Zamandaki 25 nokta için rakam bu sapmaları gösterir (ms olarak değil, saniye olarak):
Ve sunucudan gelen verilere göre milisaniye cinsinden bir şey bulmanın amacı nedir?
İkinci seçenek daha açıktır. Eğer bilgisayarınızda astronomik saat ile zaman senkronizasyonu bildiğiniz bir hata ile yapılıyorsa, sunucunun çalıştığı lokasyonda astronomik saat aynı hata ile (bölge farkı dikkate alınarak) bilinir. Ama neden o...
Strateji test ediciden bir yerde optimizasyon gitti. Küçük kargaların hiçbir değeri yok, anlayamıyorum. MT4 yapı 1010. Windows 8.1.
Optimizasyonu nasıl etkinleştireceğimi söyle.
Ekran görüntülerini ekliyorum. Optimize Et düğmesi eksik.
}
Yetkili programcılardan benim hatamın ne olduğunu açıklamalarını rica ediyorum? sıralama neden değiştirilmiyor!!! ve derleyici aynı anda herhangi bir hata vermiyor
Ders kitabını inceledim.Okudum ve ana hatlarıyla belirttim..Hataları özellikle belirtebilirsiniz..çünkü derleyici hata vermiyor ve test cihazında hata yok.ama sıralama değiştirilmiyor.değişiklik sırası gibi programda hiç görünmüyor
OrderSend()'in ne döndürdüğünü dikkatlice okuyun
Ve evet, bunu yapardım:
OrderSend()'in ne döndürdüğünü dikkatlice okuyun
Ve evet, bunu yapardım: