Kodlama yardımı - sayfa 242

 
Mastercash:
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

Dosyalar:
_test_mc.mq4  3 kb
 
mladen:
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);

}

 
BlackCoq:
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 OpenOrderPrice(double priceToCompareTo, double priceDeviation)

{

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)

 
mladen:
Bunun gibi bir şey deneyin:
double OpenOrderPrice(double priceToCompareTo, double priceDeviation)

{

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?

 
BlackCoq:
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 OpenOrderPrice(int orderType, double priceToCompareTo, double priceDeviation)

{

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

 
mladen:
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ır

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.

//+------------------------------------------------------------------+//| expert start function |

//+------------------------------------------------------------------+

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)

//----
 
BlackCoq:
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.

//+------------------------------------------------------------------+//| expert start function |

//+------------------------------------------------------------------+

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 OpenOrderPrice(int orderType, double priceToCompareTo, double priceDeviation)

{

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

 
mladen:
Bu fonksiyon kodunda bir hata var. OrderSelect()'in pozisyonda çalıştığını ve kontrol etmediğini varsaydım. Bunu kullan :
double OpenOrderPrice(int orderType, double priceToCompareTo, double priceDeviation)

{

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

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?

Dosyalar:
564.mq4  10 kb
 
sulaimoney:
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

Dosyalar:
564_1.mq4  10 kb
Neden: