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
Birisi bana neyi yanlış yaptığımı söyleyebilir mi?
#özellik telif hakkı "wnk"
#özellik bağlantısı "www.wnk.com"
#özellik göstergesi_chart_window
#özellik göstergesi_tamponları 2
#özellik göstergesi_color1 Kireç
#özellik göstergesi_renk2 Kırmızı
//--- arabellekler
çift ExtMapBuffer1[];
çift ExtMapBuffer2[];
//harici değişken......
//+------------------------------------------- -------------------+
//| Özel gösterge başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
{
//---- göstergeler
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,217);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1.217);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//| Özel gösterge sıfırlama işlevi |
//+------------------------------------------- -------------------+
int tanım()
{
//----
//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//| Özel gösterge yineleme işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
statik tarihsaat LastAlertTime = TimeCurrent();
int counted_bars=IndicatorCounted(),
sınır;
if(sayılan_barlar<0)
dönüş(-1);
if(counted_bars>0)
counted_bars--;
limit=Barlar-sayılan_barlar;
while(sınır)
{
çift ema13=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
double ema5=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
double b4ema13=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,1);
double b4ema5=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1);
double mom=iMomentum(NULL,0,14,PRICE_CLOSE,0);
double b4mom=iMomentum(NULL,0,14,PRICE_CLOSE,1);
// yukarı uyarılar
if((LastAlertTime!=Zaman[0])&&(ema5>ema13)&&(ema5>b4ema5)&&(ema13>b4ema13)&&(mom>b4mom)&&(mom>98.6591))
ExtMapBuffer1[limit]=Yüksek[limit]+5*Puan;
LastAlertTime = Zaman[0];
Alert(Symbol()," ",Period(),"M Fiyat YUKARI");
// uyarıları sat
if((LastAlertTime!=Zaman[0])&&(ema5<ema13)&&(ema5<b4ema5)&&(ema13<b4ema13)&&(mom<b4mom)&&(mom<100.6872))
ExtMapBuffer2[limit]=Düşük[limit]-5*Nokta;
LastAlertTime = Zaman[0];
Alert(Symbol()," ",Period(),"M Fiyat Aşağı");
}
dönüş(0);
}
//+------------------------------------------- -------------------+ana para
şimdi dene
Axel
Yapılabilir.
Basitçe açık emirler istenen tip için taranmalı ve açık fiyatları istenen yeni açık fiyatla karşılaştırılmalıdır veya açıldıkları çubuklar açılış kriteri olan çubukla karşılaştırılabilir.EDIT: İşlevi eklemeyi unutmuşum gibi görünüyor.
Farklı "i=OrdersTotal()-1" için aşağıdaki gibi bir fonksiyonu 20 defa veya daha fazla yazmak ve ardından tüm fonksiyonu çağırmak ve onları yeni açılış fiyatıyla eşleştirmek işe yarar mı?
çift OpenOrderPrice()
{
çift TempOrderPrice = 0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
TempOrderPrice = OrderOpenPrice();
}
}
dönüş (TempOrderPrice);
}
EDIT: İşlevi eklemeyi unutmuşum gibi görünüyor.
Farklı "i=OrdersTotal()-1" için aşağıdaki gibi bir işlevi 20 kez yazmak ve ardından tüm işlevi çağırmak ve bunları yeni açılış fiyatıyla eşleştirmek işe yarar mı?
çift OpenOrderPrice()
{
çift TempOrderPrice = 0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
TempOrderPrice = OrderOpenPrice();
}
}
dönüş (TempOrderPrice);
}Bunun gibi bir şey deneyin:
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
siyah Coq
Açılması gereken fiyatı ve fiyattan maksimum sapmayı ( mutlak bir değer : örneğin beş puan için 5 değil, 5*_Puan) ve aradaki farkın bu fiyat sapmasına eşit veya daha küçük olup olmadığını geçmeniz gerekir. o yaklaşık fiyattan açılan emrin fiyatını iade edecektir. Aksi takdirde sonuç olarak -1 döndürür (bu durumda benzer fiyatlara sahip emir olmadığı anlamına gelir)
Bunun gibi bir şey deneyin:
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
siyah Coq
Açılması gereken fiyatı ve fiyattan maksimum sapmayı (mutlak bir değer: örneğin beş puan için 5 değil, 5*_Puan) ve aradaki farkın bu fiyat sapmasına eşit veya daha küçük olup olmadığını geçmeniz gerekir. o yaklaşık fiyattan açılan emrin fiyatını iade edecektir. Aksi takdirde sonuç olarak -1 döndürür (bu durumda benzer fiyatlara sahip emir olmadığı anlamına gelir)Bu nedenle, satın almak istediğim fiyattan 2 pip sapma gösteren herhangi bir açık emir olup olmadığını kontrol etmek istersem, bu işlevi çağırırım:
double BuyOpenOrderPrice(çift fiyatToCompareTo, double fiyatSapma)
{
çift TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
fiyatSapma = 2*Puan;
priceToCompareTo = Sor;
kırmak;
}
}
dönüş (TempOrderPrice);
}
Ve sonra şort için bir tane daha mı yapacaksın?
Bu nedenle, satın almak istediğim fiyattan 2 pip sapma gösteren herhangi bir açık emir olup olmadığını kontrol etmek istersem, bu işlevi çağırırım:
double BuyOpenOrderPrice(çift fiyatToCompareTo, double fiyatSapma)
{
çift TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
fiyatSapma = 2*Puan;
priceToCompareTo = Sor;
kırmak;
}
}
dönüş (TempOrderPrice);
}
Ve sonra şort için bir tane daha mı yapacaksın?Numara
Fonksiyonu şöyle çağırırsınız:
if (OpenOrderPrice(OP_BUY,Ask ,2.0*_Point) == -1) uzunlara izin verir ve
if (OpenOrderPrice(OP_SELL,Ask,2.0*_Point) == -1) şortlara izin verir
Çağrı, sipariş açma mantığına sahip olduğunuz kod bölümünden olmalıdır.
Ancak o zaman işlev farklı olmalıdır (bunun gibi):
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderType()==orderType && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
İşlev şimdi her iki durumu da kapsar ve kodu işlev içinde değiştirmemelisiniz.
_____
Not: _Point değişkeni, metatrader 4'ün eski yapılarında mevcut değildir. Üstteki örnek, yeni metatrader4 için yazılmıştır. Daha eski bir yapı kullanıyorsanız (509 veya daha eski) "_Point", "Point" olmalıdır
Numara
Fonksiyonu şöyle çağırırsınız:
Çağrı, sipariş açma mantığına sahip olduğunuz kod bölümünüzden olmalıdır.
Ama sonra işlevin farklı olması gerekir (bunun gibi):
İşlev şimdi her iki durumu da kapsar ve kodu işlev içinde değiştirmemelisiniz.
_____
Not: _Point değişkeni, metatrader 4'ün eski yapılarında mevcut değildir. Üstteki örnek, yeni metatrader4 için yazılmıştır. Daha eski bir yapı kullanıyorsanız (509 veya daha eski) "_Point", "Point" olmalıdırTeşekkür ederim. Fonksiyonu EA'ya kopyaladım ve yazdığınız gibi çağırdım, ancak nedense yeni fiyatın sapması içinde başkaları olmasına rağmen pozisyon açıyor. Bu işlev tüm açık fiyatları mı yoksa yalnızca en son fiyatları mı kontrol ediyor?
Aşağıdaki EA dahil.
//+------------------------------------------------------------------+
int start()
{
//----
bool result;
PipsUntilNextCandle--;
DisplayUserFeedback();
if (OldBars != Bars)
{
PipsUntilNextCandle = RenkoBoxSize;
OldBars = Bars;
DoesTradeExist();
double take;
double stop;
RefreshRates();
//Have the last candles risen , 1=last candle , 2 = last two candles
if (Open[0] > Open[CheckCandle] && (OpenOrderPrice(OP_BUY,Ask ,20.0*Point) == -1))
{
if (TakeProfit > 0) take = NormalizeDouble(Ask + (TakeProfit * Point), Digits);
if (StopLoss > 0) stop = NormalizeDouble(Ask - (StopLoss * Point), Digits);
result = SendSingleTrade(OP_BUY, TradeComment, Lot, Ask, stop, take, MagicNumber);
if (!result) OldBars = 0;
}
//if (Open[0] > Open[2])
//Have the last candles fallen , , 1=last candle , 2 = last two candles
if (Open[0] < Open[CheckCandle] && (OpenOrderPrice(OP_SELL,Ask,20.0*Point) == -1))
{
if (TakeProfit > 0) take = NormalizeDouble(Bid - (TakeProfit * Point), Digits);
if (StopLoss > 0) stop = NormalizeDouble(Bid + (StopLoss * Point), Digits);
result = SendSingleTrade(OP_SELL, TradeComment, Lot, Bid, stop, take, MagicNumber);
if (!result) OldBars = 0;
}//if (Open[0] > Open[2])
}//if (OldBars != Bars)
//----Teşekkür ederim. Fonksiyonu EA'ya kopyaladım ve yazdığınız gibi çağırdım, ancak nedense yeni fiyatın sapması içinde başkaları olmasına rağmen pozisyon açıyor. Bu işlev tüm açık fiyatları mı yoksa yalnızca en son fiyatları mı kontrol ediyor?
Aşağıdaki EA dahil.
//+------------------------------------------------------------------+
int start()
{
//----
bool result;
PipsUntilNextCandle--;
DisplayUserFeedback();
if (OldBars != Bars)
{
PipsUntilNextCandle = RenkoBoxSize;
OldBars = Bars;
DoesTradeExist();
double take;
double stop;
RefreshRates();
//Have the last candles risen , 1=last candle , 2 = last two candles
if (Open[0] > Open[CheckCandle] && (OpenOrderPrice(OP_BUY,Ask ,20.0*Point) == -1))
{
if (TakeProfit > 0) take = NormalizeDouble(Ask + (TakeProfit * Point), Digits);
if (StopLoss > 0) stop = NormalizeDouble(Ask - (StopLoss * Point), Digits);
result = SendSingleTrade(OP_BUY, TradeComment, Lot, Ask, stop, take, MagicNumber);
if (!result) OldBars = 0;
}
//if (Open[0] > Open[2])
//Have the last candles fallen , , 1=last candle , 2 = last two candles
if (Open[0] < Open[CheckCandle] && (OpenOrderPrice(OP_SELL,Ask,20.0*Point) == -1))
{
if (TakeProfit > 0) take = NormalizeDouble(Bid - (TakeProfit * Point), Digits);
if (StopLoss > 0) stop = NormalizeDouble(Bid + (StopLoss * Point), Digits);
result = SendSingleTrade(OP_SELL, TradeComment, Lot, Bid, stop, take, MagicNumber);
if (!result) OldBars = 0;
}//if (Open[0] > Open[2])
}//if (OldBars != Bars)
//----Bu fonksiyon kodunda bir hata var. OrderSelect()'in pozisyonda çalıştığını ve kontrol etmediğini varsaydım. Bunu kullan :
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if (OrderType()==orderType && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
Şimdi düzgün çalışması gerekir
Bu fonksiyon kodunda bir hata var. OrderSelect()'in pozisyonda çalıştığını ve kontrol etmediğini varsaydım. Bunu kullan :
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if (OrderType()==orderType && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
Ve öyle. Harika çalışman için tekrar teşekkürler, Mladen.
Merhaba Mladen,
Lütfen bu koda bir göz atar mısınız, son emri seçip, son açılış fiyatına göre ek emirler açmaya çalışıyorum. Bunun dışında her şey çalışıyor gibi görünüyor
IfOrderDoesNotExist7(); IfOrderDoesNotExist5();
Aşağıdaki gibi ikisinden birini yorumlasam, sipariş iyi çalışacak.
// IfOrderDoesNotExist7();
IfOrderDoesNotExist5();
bana neyi yanlış yaptığımı söyleyebilir misin?
Merhaba Mladen,
Lütfen bu koda bir göz atabilir misiniz, son siparişi seçip son açılış fiyatına göre ek siparişler açmaya çalışıyorum. Bunun dışında her şey çalışıyor gibi görünüyor
IfOrderDoesNotExist7(); IfOrderDoesNotExist5();
Aşağıdaki gibi ikisinden birini yorumlasam, sipariş iyi çalışacak.
// IfOrderDoesNotExist7();
IfOrderDoesNotExist5();
bana neyi yanlış yaptığımı söyleyebilir misin?Süleymaniye
Bence sorun bu iki işlevde değil, yeni metatrader 4'ün boole koşullarını nasıl kontrol ettiği (metatrader 4'ün yeni yapılarından bazılarını kullanıyorsanız). Kodu biraz basitleştirdi ve boole koşullarının kesin olarak tanımlanması gereken tek yeri çözdü. Denemek