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
Ve işte Igor için başka bir soru.
Alış-satış pozisyonunu tersine çevirmek için ayrı bir özel (veya başka) bir işlev yarattınız mı ve bunun tersi de normal OrderClose - OrderSend olmadan mı?
Ben Igor değilim, ancak çevirme için standart bir OrderCloseBy işlevi var.
Merhaba! Sorunun çözümü için yardım rica ediyorum. tarif etmeye çalışacağım:
Siparişleri sayan bir fonksiyon var:
int OrdersAll(int mag)
{
int sayı=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (Sipariş Seçimi(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber() == mag )
kolvo++;
}
}
dönüş(kolvo);
}
Akım için tek bir sipariş yoksa, çalışma sürecinde ayrıca. enstrüman, koşul karşılandığında, örneğin satın almak için 1 sipariş verilmelidir, şöyle yazılır:
if (OrdersAll(MAGICNO)==0)
{
eğer(koşul)
{
op=Ask;if(SL>0){sl=Ask-SL*Nokta*mn;}if(TP>0){tp=Ask+TP*Nokta*mn;}
err=OrderSend(Symbol(),OP_BUY,LotsOptimized(),NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),
NormalizeDouble(tp,Rakamlar),"",MAGICNO,0,Mavi);
eğer(hata<0)
{
Print("OrderSend()- OP_BUY hatası. Sipariş kabul edilmedi . op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);
}
}
}
Bunun yerine, örneğin terminalde birkaç araç açarken ve her birinde bir danışman çalıştırırken, yukarıdaki kod bir sipariş açabilir - bu doğrudur, ancak aynı zamanda mors bitene kadar 20-30 sipariş açabilir. , durum birkaç kene sürerse. Bu henüz tek bir araçla fark edilmedi, ancak bunun tek bir araçla da olmayacağından emin değilim. Birden fazla sipariş açmanın zor olması için kodumu nasıl düzeltebilirim.
Igor, iyi akşamlar,
İşlevinizi çağırmayı beceremiyorum:
//+------------------------------------------- ------------------------------+
//| Yazar : Kim Igor V. namı diğer KimIV, http://www.kimiv.ru |
//+------------------------------------------- ------------------------------+
//| Sürüm : 02/19/2008 |
//| Açıklama : Mevduat para biriminde açık pozisyonların toplam kârını döndürür |
//+------------------------------------------- ------------------------------+
//| Seçenekler: |
//| sy - enstrüman adı ("" - herhangi bir sembol, |
//| NULL - geçerli karakter) |
//| operasyon - operasyon (-1 - herhangi bir pozisyon) |
//| mn - MagicNumber (-1 - herhangi bir büyü) |
//+------------------------------------------- ------------------------------+
double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
çift p=0;
int i, k=SiparişToplam();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==dk) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
dönüş(p);
}
Söyle bana, TotOrdProf=GetProfitOpenBuyPosInCurrency(EURUSD, ____, 1);
1. EURUSD'nin "EURUSD" tırnak içinde olması veya şunlar olmadan izin verilmesi gerektiğini varsayın;
2. Satın alma ve oturma toplam kârını hesaplamak için ikinci çağrı parametresi ne olmalıdır (kısa çizgi nerede) (varsayılan -1 denendi; doğru değil)
3. Üçüncü parametre uzmanın sihirli numarası mı? - Henüz ulaşmadım, sadece parametreyi doğru anlayıp anlamadığımla ilgili bir soru.
Teşekkür ederim.
TotOrdProf=GetProfitOpenBuyPosInCurrency("EURUSD",-1, -1);
- sadece EURUSD için
- tüm açık pozisyonlar (-1)
- herhangi bir büyüye sahip pozisyonlar (-1)
Tünaydın.
Bildiğiniz gibi, Sleep() işlevi terminal test cihazında çalışmaz, bu nedenle yürütmeyi geciktirmek için matematiksel işlevlerden döngüleri kullanmanız gerekir:
nerede zFILE - Expert Advisor yürütme gecikmesi.
Soru şudur: Gecikme birkaç saniyeden 10-20 dakikaya kadar (harici bir program tarafından veri işleme) gerektiğinden daha zarif bir çözüm (gecikme işlevi) var mı?
Veya en azından işlevlerin yürütme süresi nasıl daha doğru bir şekilde ölçülür (çünkü işlemcilerin hızı herkes için farklıdır) ve en frenleyici olanı nasıl seçersiniz?
Soru şudur: Gecikme birkaç saniyeden 10-20 dakikaya kadar (harici bir program tarafından veri işleme) gerektiğinden daha zarif bir çözüm (gecikme işlevi) var mı?
Geri aramaları ve senkronize edicileri kullanmayı denediniz mi?
Kim'in işlevleri
ilginç bir şekilde, son atılan şablonun adını çıkarmanıza izin veren bir işlev var
ve bileşenlerindeki değişiklikleri düzeltin
KimIV bir gösterge yazabilir ve yazabilir misiniz?
Gösterge, belirtilen süre boyunca düz bir kanal aramalı ve ayarlarda belirtilenden daha geniş olmamalıdır.
Bu kanal göstergesi, isTradeTimeInt() Fonksiyonunuzda olduğu gibi hem gün içinde hem de ertesi güne geçişte arama yapmalıdır.
Bu gösterge günde 5 kanal veya sadece bir kanal çekebilir.
Ayarlar yapıldı
puan cinsinden harici çift maksimum kanal yüksekliği
extern int Bar_Time zaman aralığını bar(1) veya saat ve dakika(2) olarak nasıl koruyacağız
saat ve dakika cinsinden harici dize minimum kanal zaman aralığı
çubuklarda çubuklarda extern int minimum kanal zaman aralığı
extern int Çizilmiş kalan maksimum çizilen kanal sayısı
Benzer bir gösterge https://www.mql5.com/en/code ekliyorum ancak belirli bir süre için bir kanal çekiyor ve böyle bir kanalı kendisi aramıyor. Maksimum kanal yüksekliğini aşmayan ve en azından minimum kanal zaman aralığını sürdüren böyle bir kanalı kendisi aramalıdır.
Bar_Time by time'ı seçersek, kanal (1), mevcut zamandan, ayarlarda belirtilen süreden, yani 2 saat 15 dakika veya başka bir belirtilen süreden korunur.Kanalın maksimum yüksekliği, maksimum iki satır çizer ve minimum uzunluk 23:00 ile 02:15 arası. Fibo seviyeleri de kanalın üstünde ve altında çizilir.
Bar_Time'ı bar sayısı ile seçersek, kanal mevcut bardan ayarlarda belirtilen bar sayısı çıkar, yani sıfır bardan sıfır bara eksi ayarlarda belirtilen sayı kadar ayarlanır. Verilen sayı 50 ise şimdi sıfır çubuğundan başlayarak son 50 çubuk için maksimum ve minimum arayacağız ve maksimum eksi minimum kanalın maksimum yüksekliğini geçmiyorsa iki çizgi çiziyor. , maksimum ve minimum 50 bar uzunluğunda.Fibo seviyeleri ayrıca kanalın üstünde ve altında çizilir
Tüm kanal seviyeleri ve veriler arabelleklerde saklanır
Igor'a soru
Mümkünse, her bir Hesabın durumunu sorgulayan (lot büyüklüğünü hesaplamak için) iki ayrı hesap üzerinde çalışan (Alım Sat) bir Uzman Danışman kodunun belirli bir parçası ve aynı zamanda hesaptan hesaba depo aktarma özelliği de vardır. belirli koşullar altında mevduatın bir kısmını çekmek için bir simülatör olarak (örneğin, aylık veya üç aylık kar - ondan% n)
soruyu açıklıyorum
1 EA Satın Al (anket hesabı durumu 2) için çalışıyor .. 6200
EA 2 Sat için çalışıyor (hesap 1 durumunu yoklar) .. 8400
Açık pozlar yoksa
1100 hesap 2'den hesap 1'e
Hesap 1 - 7300
hesap 2 - 7300
toplam mevduat SD=14600 Maksimum risk - %10 Maksimum lot 0.14
Daha ileri
01.04.09 SD=10000 itibariyle
01.07.09 SD=14600 itibariyle
Kar=4600
%10 = 460
460 üçüncü hesaba para çekme
teşekkürler
Sevgili Igor! Yardım edin!
a-SimpleTrailing.mqh dahildir .
Belirtilenleri ekledim ancak 3 hata çıkıyor :
'clModifyBuy' - değişken tanımlı değil
'clModifySell' - değişken tanımlı değil
'ti' - değişken zaten tanımlanmış
Ne yapalım?(
İşte dahil olanlar: