Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 100
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
Herkese merhaba, lütfen danışmanın kodunda bir hata bulmama yardım edin, her şeyi inceledim, her şey kodda doğru yazılmış gibi görünüyor, ancak bir nedenden dolayı program doğru ticaret yapmıyor! Fikir şudur: EA aynı yönde iki uzun mum aramalıdır (mumlar arasındaki uzunluk EA'da düzenlenir, yani yöne bağlı olarak iki minimum veya maksimum mum arasında), fiyat kırılırsa Son mumun minimum veya maksimum ters yönde, bir anlaşma açılmalıdır (Dosyaya ekli çizelgede durumların örnek fotoğrafları). EA, bu tür her uygun durumda alım satım açmalıdır ve bir nedenden dolayı alım satımları yalnızca günler arasındaki alım satım pencerelerinde açar. Programcılar için zor olmayan durum budur, lütfen yardım edin, hatayı düzeltin. Aşağıdaki danışman koduna ve ekteki dosyaya bakın.
//+------------------------------------------- ------------------------------------------------+
//| Space_Candles.mq4 |
//| Telif hakkı 2017, Vladimir |
//| vk.com/id229534564 |
//| Posta: Vladim120385@yandex.ru |
//+------------------------------------------- ------------------------------------------------+
#property telif hakkı "Telif hakkı 2017, Vladim"
#özellik bağlantısı "vk.com/id229534564"
#özellik sürümü "1.00"
#mülkiyet katı
//--- EA parametreleri
harici string parametreEA = ""; // Parametreler EA
dış çift hacim = 0.01; // Ses
harici çift stopLoss = 5; // kaybı durdurmak
harici çift alProfit = 1.5; // kar almak
dış çift maxSpacing = 150; // MaxSpacing
dış çift minSpacing = 30; // MinSpacing
harici çift sondaki durdurma = 0; // sondaki durdurma
harici int büyü = 127; // büyü
//--- global değişkenler
tarihsaat newCandle;
int-ipucu;
//+------------------------------------------- ------------------------------------------------+
int OnInit()
{
dönüş(INIT_SUCCESSED);
}
//+------------------------------------------- ------------------------------------------------+
geçersiz OnDeinit(const int nedeni)
{
}
//+------------------------------------------- ------------------------------------------------+
geçersiz OnTick()
{
if(newCandle != Zaman[0]) FindPattern();
newCandle = Zaman[0];
}
//+------------------------------------------- ------------------------------------------------+
void OpenOrder(int type) // Bir piyasa emri aç
{
if(type == OP_BUY) if(OrderSend(_Symbol, OP_BUY, hacim, Sor, 0, 0, 0, "", magic, 0))) SetSLTP(OP_BUY);
if(type == OP_SELL) if(OrderSend(_Symbol, OP_SELL, volume, Bid, 0, 0, 0, "", magic, 0))) SetSLTP(OP_SELL);
}
//+------------------------------------------- ------------------------------------------------+
void SetSLTP(int type) // Stop emirlerini ayarla
{
çift sl = 0;
çiftp = 0;
if(tür == OP_BUY)
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_BUY && OrderStopLoss() == 0)
{
sl = NormalizeDouble(Düşük[1] - stopLoss * _Point, _Digits);
tp = NormalizeDouble(OrderOpenPrice() + (OrderOpenPrice() - Düşük[1]) * takeProfit, Rakamlar);
if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) dönüş;
}
if(tür == OP_SEL)
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_SELL && OrderStopLoss() == 0)
{
sl = NormalizeDouble(Yüksek[1] + stopLoss * _Point, _Digits);
tp = NormalizeDouble(OrderOpenPrice() - (Yüksek[1] - OrderOpenPrice()) * takeProfit, Digits);
if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) dönüş;
}
}
//+------------------------------------------- ------------------------------------------------+
void FindPattern() // Mumlar arasında büyük bir mesafe aranıyor
{
if(Yüksek[1] < Yüksek[2] && Teklif > Yüksek[1] && Düşük[1] < Düşük[2])
{
çift boşluk = NormalizeDouble((Yüksek[2] - Yüksek[1]) / _Point, 0);
if(maxSpacing >= boşluk && minSpacing <= boşluk)
OpenOrder(OP_BUY);
}
if(Düşük[1] > Düşük[2] && Teklif < Düşük[1] && Yüksek[1] > Yüksek[2])
{
çift boşluk = NormalizeDouble((Düşük[1] - Düşük[2]) / _Point, 0);
if(maxSpacing >= boşluk && minSpacing <= boşluk)
OpenOrder(OP_SELL);
}
{
if (TrailingStop!=0) TrailingStop();
}
}
//+------------------------------------------- ------------------------------------------------+
void TrailingStop()
{
çift StLo,OSL,OOP;
bool hatası=doğru;
(int i=0; i<SiparişToplam(); i++) için
{
if (Sipariş Seçimi(i, SELECT_BY_POS))
{
ipucu = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(), Rakamlar);
if (ipucu==0)
{
StLo = NormalizeDouble(Teklif - TrailingStop*Point,Digits);
(StLo < OOP) devam ederse;
if(StLo>OSL)
error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,Beyaz);
}
if (ipucu==1)
{
StLo = NormalizeDouble(Sor + TrailingStop*Point,Rakamlar);
(StLo > OOP) devam ederse;
if (StLo < OSL || OSL==0 )
error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,Beyaz);
}
if (!error) Alert("Error TrailingStop ",GetLastError()," ",Symbol()," SL ",StLo);
}
}
}
}
//+------------------------------------------- ------------------------------------------------+
Herkese merhaba, lütfen danışmanın kodunda bir hata bulmama yardım edin, her şeyi inceledim, her şey kodda doğru yazılmış gibi görünüyor, ancak bir nedenden dolayı program doğru ticaret yapmıyor! Fikir şudur: EA aynı yönde iki uzun mum aramalıdır (mumlar arasındaki uzunluk EA'da düzenlenir, yani yöne bağlı olarak iki minimum veya maksimum mum arasında), fiyat kırılırsa Son mumun minimum veya maksimum ters yönde, bir anlaşma açılmalıdır (Dosyaya ekli çizelgede durumların örnek fotoğrafları). EA, bu tür her uygun durumda alım satım açmalıdır ve bir nedenden dolayı alım satımları yalnızca günler arasındaki alım satım pencerelerinde açar. Programcılar için zor olmayan durum budur, lütfen yardım edin, hatayı düzeltin. Aşağıdaki danışman koduna ve ekteki dosyaya bakın.
Belki yeteri kadar, her konuda gönderiler oluşturdunuz ve aynı zamanda kendinizinkini oluşturdunuz.
Merhaba.
Danışmanın ticaretini zamana göre nasıl sınırlayacağımı söyle.
Forumdan birçok yol denedim ama hiçbir şey olmadı, yazılı olarak hiçbir şey anlamıyorum.
Parmağınızı doğrudan bir şeyin yerleştirileceği yere sokmanız önerilir.
başladıktan sonra koymak. ve uzman her gün terminalde belirtilen zaman aralığında işlem yapacak
Herkese merhaba, lütfen danışmanın kodunda bir hata bulmama yardım edin, her şeyi inceledim, her şey kodda doğru yazılmış gibi görünüyor, ancak bir nedenden dolayı program doğru ticaret yapmıyor! Fikir şudur: EA aynı yönde iki uzun mum aramalıdır (mumlar arasındaki uzunluk EA'da düzenlenir, yani yöne bağlı olarak iki minimum veya maksimum mum arasında), fiyat kırılırsa Son mumun minimum veya maksimum ters yönde, bir anlaşma açılmalıdır (Dosyaya ekli çizelgede durumların örnek fotoğrafları). EA, bu tür her uygun durumda alım satım açmalıdır ve bir nedenden dolayı alım satımları yalnızca günler arasındaki alım satım pencerelerinde açar. Programcılar için zor olmayan durum budur, lütfen yardım edin, hatayı düzeltin. Aşağıdaki danışman koduna ve ekteki dosyaya bakın.
alış ve satış girme koşulunu kontrol edin
Herkese merhaba, lütfen danışmanın kodunda bir hata bulmama yardım edin, her şeyi inceledim, her şey kodda doğru yazılmış gibi görünüyor, ancak bir nedenden dolayı program doğru ticaret yapmıyor! Fikir şudur: EA aynı yönde iki uzun mum aramalıdır (mumlar arasındaki uzunluk EA'da düzenlenir, yani yöne bağlı olarak iki minimum veya maksimum mum arasında), fiyat kırılırsa Son mumun minimum veya maksimum ters yönde, bir anlaşma açılmalıdır (Dosyaya ekli çizelgede durumların örnek fotoğrafları). EA, bu tür her uygun durumda alım satım açmalıdır ve bir nedenden dolayı alım satımları yalnızca günler arasındaki alım satım pencerelerinde açar. Programcılar için zor olmayan durum budur, lütfen yardım edin, hatayı düzeltin. Aşağıdaki danışman koduna ve ekteki dosyaya bakın.
İlk önce danışmanın bir bölümünü, bulunan mumları grafikte işaretlemesi için yazmak daha iyidir - her şey netleşecektir. Ve sizin durumunuzda aşağıdaki satırlar gereksizdir:
Cemaatten yardım istemek...
*
Kalman filtre göstergesini forumdan indirdim (kaynak ekte).
Grafikte her şey yolunda.
Expert Advisor'da aşağıdaki satırla okumaya çalışırken
iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
Açıkça göstergeyle ilgili olmayan bir ve aynı sayıda çıktı verir:
![](https://c.mql5.com/3/159/Screen__1.png)
Ne olabilirdi ?
Toplumdan yardım istemek...
*
Kalman filtre göstergesini forumdan indirdim (kaynak ekte).
Grafikte her şey yolunda.
Expert Advisor'da aşağıdaki satırla okumaya çalışırken
iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
Açıkça göstergeyle ilgili olmayan bir ve aynı sayıda çıktı verir:
Ne olabilirdi ?
BOŞ_VALUE
Gösterge arabelleğinde boş değer
2147483647 (0x7FFFFFFF)
BOŞ_VALUE
Gösterge tamponundaki boş değer
2147483647 (0x7FFFFFFF)
:) zaten buldum...
Neden çıkıyor?
:) zaten buldum...
Neden çıkıyor?
2 renk olduğu için gösterge 2 diziye sahiptir. Çubuk üzerinde ilk rengin bir satırı varken, ikinci rengin bulunduğu dizi EMPTY_VALUE değerine eşittir,
yani, istekten sonra iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
iValue = EMPTY_VALUE, 1. çubuktaki satırın turuncu olduğu anlamına gelir. (çünkü mavi dizi = EMPTY_VALUE)
2 renk olduğu için gösterge 2 diziye sahiptir. Çubuk üzerinde ilk rengin bir satırı varken, ikinci rengin bulunduğu dizi EMPTY_VALUE değerine eşittir,
yani, istekten sonra iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
iValue = EMPTY_VALUE, 1. çubuktaki satırın turuncu olduğu anlamına gelir. (çünkü mavi dizi = EMPTY_VALUE)
Teşekkürler Nikolai...
Her iki hattan da aldım.
Sonra onları bir araya getirdim (sol bir tampon). Aynı sonuç.
*
Aşağıdaki soru ortaya çıktı:
Göstergede draw_begin=500 değişkeni vardır, yani. grafiğin çizildiği sondan (en taze mumdan) mum sayısı.
Ve iCustom() yöntemini kullanarak gösterge değerini çıkardığımızda, bu 500 parça hangi mumdan sayılır?
Neden önemlidir - draw_begin sadece çizim için değil, aynı zamanda gösterge hesaplamasına da katılır...