Lütfen danışmanların ücretsiz olarak yazılmasına yardımcı olun. 5 farklı fikir. - sayfa 15

 

Her şey. Apaçık. Yardım etmeye "denedin". Biraz daha fikir paylaşmanın zamanının geldiğini hissediyorum.

 
GeneratorID :

Her şey. Apaçık. yardım etmeye çalıştım. Biraz daha fikir paylaşmanın zamanının geldiğini hissediyorum.


"Eski bisiklet" ile kim ilgilenecek? Öğrenmeye yeni başlamaya çalıştığınız şeyin forumda uzun zaman önce geçtiğini ve kod tabanında ücretsiz uygulamalar olduğunu hala anlamıyorsunuz - bak ve oyna. Kendi fikirleriniz var mı? Aksi takdirde tartışılacak bir şey yoktur.
 

Lütfen danışmana maksimum açık sipariş sayısını eklememe yardım edin!

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

//| v128-2.mq4 |

//| Telif hakkı © 2011, Andrey N. Bolkonsky |

//| 21.03.2011 |

//| e-posta: abolk@yandex.ru | Skype: abolk1 |

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

#özellik telif hakkı "Telif hakkı © 2011, Andrey N. Bolkonsky"

#özellik bağlantısı "abolk@yandex.ru"


//

extern string rem2 = "=== Parti sayısı ===";

harici çift _Lots0_1 = 0.1; // Temel seviye (1. sıra için)

harici çift _Lots0_2 = 0.1; // Temel seviye (2. sıra için)

//

extern string rem3 = "=== Ek parametreler ===";

harici int _TakeProfit1_Proc = 50; // 1. mertebeden kar alma riski yüzdesi

extern int _SpaseFromMaxMin = 1; // Üstten/Alttan Ofset

//

extern string rem4 = "=== Başabaş parametreler ===";

extern bool _IsStopLoss_0 = yanlış; // Başabaş seviyesinin kullanımını etkinleştirme

harici int _StopLoss_0_From = 0; // Başabaş seviyesinden ofset (puan olarak)

harici int _StopLoss_0_Level = 15; // Başabaş seviyesi

//

extern string rem5 = "=== İzleyen durdurma parametreleri ===";

extern bool _IsTrailingStop = false; // Sondaki durdurmayı etkinleştir

bool _IsTrailingStopProfit = true; // Başabaş konumundan sondaki durdurmayı etkinleştirme

//harici int _TrailingStopProfit_From = 0; // Başabaş seviyesinden ofset (puan olarak)

extern int _TrailingStopLevel = 15; // Takip eden durma seviyesi

extern int _TrailingStopStep = 5; // Sondaki dur hareket adımı

//

extern string rem6 = "=== Araç ayarları ===";

harici string _Symboll = ""; // Enstrümanın sembolik adı: "" - geçerli sembol

harici int _Zaman çerçevesi = 0; // Periyot: 0 - mevcut grafiğin periyodu

int_Rakamlar; // Fiyatta ondalık noktadan sonraki basamak sayısı

çift _Puan; // Alıntı para biriminde nokta boyutu

extern int _Slippage = 2; // kayma

harici int _Magic1 = 1281; // EA siparişlerinin benzersiz sayısı (1. sıra)

harici int _Magic2 = 1282; // EA siparişlerinin benzersiz sayısı (2. sıra)

//

extern string rem7 = "=== MA1 gösterge parametreleri ===";

harici int _MA1_Zaman çerçevesi = PERIOD_D1; // Periyot: 0 - mevcut grafiğin periyodu

harici int _MA1_Period = 20; // Hareketli ortalamanın hesaplanması için ortalama periyot

harici int _MA1_Shift = 0; // Fiyat grafiğine göre gösterge kayması

harici int _MA1_Yöntem = 0; // Ortalama alma yöntemi: 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA

harici int _MA1_Applied_Price = 0; // Kullanılan fiyat: 0 - kapat, 1 - açık, 2 - yüksek, 3 - düşük

//

extern string rem8 = "=== MA2 gösterge parametreleri ===";

harici int _MA2_Zaman çerçevesi = PERIOD_H4; // Periyot: 0 - mevcut grafiğin periyodu

harici int _MA2_Period = 20; // Hareketli ortalamanın hesaplanması için ortalama periyot

harici int _MA2_Shift = 0; // Fiyat grafiğine göre gösterge kayması

harici int _MA2_Method = 0; // Ortalama alma yöntemi: 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA

harici int _MA2_Applied_Price = 0; // Kullanılan fiyat: 0 - kapat, 1 - açık, 2 - yüksek, 3 - düşük

//

extern string rem9 = "=== Bollinger Bantları gösterge parametreleri ===";

//harici int _BB_Zaman çerçevesi = 0; // Periyot: 0 - mevcut grafiğin periyodu

harici int _BB_Period = 20; // Ana gösterge çizgisinin ortalama periyodu

harici int _BB_Deviation = 2; // Ana hattan sapma

harici int _BB_Bands_Shift = 0; // Fiyat grafiğine göre gösterge kayması

harici int _BB_Applied_Price = 0; // Kullanılan fiyat: 0 - kapat

//

extern string rem10 = "=== ZigZag gösterge parametreleri ===";

//harici int _ZZ_Zaman çerçevesi = 0; // Periyot: 0 - mevcut grafiğin periyodu

harici int _ZZ_ExtDepth = 12;

harici int _ZZ_ExtDeviation = 5;

harici int _ZZ_ExtBackstep = 3;

//

datetime_TimeÖnceki;

tarihsaat _TimeCurrent;

//

string_fstr;

int_tp;

//




void MaxOrders(int max_orders=5);











//=++============================================ ================++=

int init()

{

if(_Symbol == "") _Symboll = Symbol();

//

_Digitss = MarketInfo(_Symbol, MODE_DIGITS);

_Points = MarketInfo(_Symbol, MODE_POINT);

//

if(_Timeframe == 0) _Timeframe = Dönem();

Print("v128-2 > init() >> _Timeframe=", _Timeframe,

"rem4=",_IsStopLoss_0,

"rem5=",_IsTrailingStop,_IsTrailingStopProfit);

//

_fstr = "v128_";

_tp = _FileReadWriteDouble(_fstr+"_tp.dat", 0); // dosyanın var olduğundan emin olun, yoksa oluşturun

Print("v128-2 > init() >> _Timeframe=", _Timeframe, " _tp=",_tp);

//

_TimePrevious=iTime(_Symbol, _Timeframe, 0);

//

Print("v128-2 > Bitti: init() >> _TimePrevious=", _TimePrevious, " (", TimeToStr(_TimePrevious,TIME_DATE|TIME_MINUTES), ")");

dönüş(0);

}



//=++============================================ ================++=

int başlangıç()

{

çift P_Close1, P_Close2;

çift BB_1_üst, BB_1_alt;

çift MA1_0, MA2_0;

çift P_ask, P_bid;

bool is_signal_2_buy, is_signal_2_sell;

çift P1_buy, P2_buy, P3_buy;

çift P1_sell, P2_sell, P3_sell;

bool is_b1 = yanlış, is_s1 = yanlış;

bool is_b2 = yanlış, is_s2 = yanlış;

int bileti;

//

_TimeCurrent = iTime(_Symbol, _Timeframe, 0);

if(_TimeCurrent != _TimePrevious)

{

MA1_0 = iMA(_Symbol, _MA1_Timeframe, _MA1_Period, _MA1_Shift, _MA1_Method, _MA1_Applied_Price, 0);

MA2_0 = iMA(_Symbol, _MA2_Timeframe, _MA2_Period, _MA2_Shift, _MA2_Method, _MA2_Applied_Price, 0);

BB_1_upper = iBands(_Symbol, _Timeframe, _BB_Period,_BB_Shift,_BB_Bands_Shift,_BB_Applied_Price, MODE_UPPER, 1);

BB_1_lower = iBands(_Symbol, _Timeframe, _BB_Period,_BB_Shift,_BB_Bands_Shift,_BB_Applied_Price, MODE_LOWER, 1);

P_Close1 = iClose(_Symbol, _Timeframe, 1);

P_Close2 = iClose(_Symbol, _Timeframe, 2);

P_ask = MarketInfo(_Symbol, MODE_ASK);

P_bid = MarketInfo(_Symbol, MODE_BID);

Print("v120-4 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> MA1_0=", MA1_0, " | MA2_0=", MA2_0,

" -> BB_1_upper=", BB_1_upper, " | BB_1_lower=", BB_1_lower,

" -> P_Close1=", P_Close1, " | P_Close2=", P_Close2,

" -> ask=", P_ask, " | bid=", P_bid);

//

is_signal_2_buy = P_bid >= MA1_0 && P_bid >= MA2_0 && P_Close1 >= BB_1_lower && P_Close2 <= BB_1_lower && P_bid >= BB_1_lower;

is_signal_2_sell = P_bid <= MA1_0 && P_bid <= MA2_0 && P_Close1 <= BB_1_upper && P_Close2 >= BB_1_upper && P_bid <= BB_1_upper;

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> is_signal2 -> buy=", is_signal_2_buy, " | sell=", is_signal_2_sell);

// ========= pazara göre

// ========== bir SATIN AL emri açma

if( is_signal_2_buy )

{

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SATIN AL emri açma sinyali");

OrdersDeleteAll(OP_SELL);

//

if(!is_b1 || !is_b2)

{

P1_buy = P_ask;

P3_buy = FindPriceMinMax(yanlış) - (_SpaseFromMaxMin) * _Point;

_tp = (P1_buy - P3_buy) / _Point * (_TakeProfit1_Proc / 100.0);

P2_buy = DoubleTestZero(_tp, P1_buy + (_tp) * _Point);

//

_FileWriteDouble(_fstr+"_tp.dat", _tp);

//

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> AL -> P1_buy=", P1_buy, " | P2_buy=", P2_buy, " | P3_buy=", P3_buy, "_tp=", _tp);

//

bilet = OrderSend(_Symbol, OP_BUY, _Lots0_1, ND(P1_buy), _Slippage, ND(P3_buy), ND(P2_buy),

NULL, _Magic1, 0, CLR_NONE);

if(bilet == -1)

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SATIN AL (1) > Hata (açma) #", GetLastError());

başka is_b1 = doğru;

//

bilet = OrderSend(_Symbol, OP_BUY, _Lots0_2, ND(P1_buy), _Slippage, ND(P3_buy), 0,

NULL, _Magic2, 0, CLR_NONE);

if(bilet == -1)

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SATIN AL (2) > Hata (açma) #", GetLastError());

başka is_b2 = doğru;

//

}

başka { is_b1 = doğru; is_b2 = doğru; }

}

başka { is_b1 = doğru; is_b2 = doğru; }

//Print("= satın al +++",is_b1,is_b2,"==",is_s1,is_s2);

// ========== bir SATIŞ emri açma

if( is_signal_2_sell )

{

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SATIŞ emri açma sinyali");

OrdersDeleteAll(OP_BUY);

//

if(!is_s1 || !is_s2)

{

P1_sell = P_bid;

P3_sell = FindPriceMinMax(true) + (_SpaseFromMaxMin) * _Point;

_tp = (P3_sell - P1_sell) / _Point * (_TakeProfit1_Proc / 100.0);

P2_sell = DoubleTestZero(_tp, P1_sell - (_tp) * _Point);

//

_FileWriteDouble(_fstr+"_tp.dat", _tp);

//

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SATIN AL -> P1_sell=", P1_sell, " | P2_sell=", P2_sell, " | P3_sell=", P3_sell);

//

bilet = OrderSend(_Symbol, OP_SELL, _Lots0_1, ND(P1_sell), _Slippage, ND(P3_sell), ND(P2_sell),

NULL, _Magic1, 0, CLR_NONE);

if(bilet == -1)

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SAT (1) > Hata (açma) #", GetLastError());

başka is_s1 = doğru;

//

bilet = OrderSend(_Symbol, OP_SELL, _Lots0_2, ND(P1_sell), _Slippage, ND(P3_sell), 0,

NULL, _Magic2, 0, CLR_NONE);

if(bilet == -1)

Print("v128-2 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SAT (2) > Hata (açma) #", GetLastError());

başka is_s2 = doğru;

//

}

başka { is_s1 = doğru; is_s2 = doğru; }

}

başka { is_s1 = doğru; is_s2 = doğru; }

//Print("= sat +++",is_b1,is_b2,"==",is_s1,is_s2);

// ==========

if(is_b1 && is_s1 && is_b2 && is_s2)

_TimePrevious=_TimeCurrent;

}

//

if(_IsTrailingStop)

{

if( !FindOrders(_Magic1) ) TrailingStop(_tp);

}

//

if(_IsStopLoss_0)

StopLoss_0(_StopLoss_0_From);

//

dönüş(0);

}



//=++============================================ ================++=

double DoubleTestZero(çift değer, çift yeni_değer)

{

if(değer==0) dönüş(değer);

başka bir dönüş(yeni_değer);

}



//=++============================================ ================++=

çift ND(çift değer)

{

dönüş( NormalizeDouble(değer, _Digits) );

}



//=++============================================ ================++=

// siparişleri kapatıyoruz. Tümünü kapat

void OrdersDeleteAll(int cmd)

{

while(CountOrders(cmd) > 0)

{

for(int i = OrdersTotal() - 1; i >= 0 ; i--)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if( (OrderSymbol() == _Symbol)

&& (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2)

&& (OrderType() == cmd))

{

if(OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), _Slippage, CLR_NONE))

Print("v128-2 > ", _Symbol, " > SATIN AL -> bilet=", OrderTicket(),

" -> Hata (kapanış) #", GetLastError());

if(OrderType() == OP_SEL)

if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), _Slippage, CLR_NONE))

Print("v128-2 > ", _Symbol, " > SAT -> bilet=", OrderTicket(),

" -> Hata (kapanış) #", GetLastError());

}

}

}


}


// sipariş sayısı

}




//=++============================================ ================++=

// yöndeki siparişlerin sayısını sayma

int CountOrders(int cmd)

{

int n = 0;

for(int i = OrdersTotal() - 1; i >= 0 ; i--)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if( (OrderSymbol() == _Symbol)

&& (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2)

&& (OrderType() == cmd) ) n++;

}

}

dönüş(n);

}



//=++============================================ ================++=

// sihirle bir sipariş ara

bool FindOrders(int magic)

{

for(int i = OrdersTotal() - 1; i >= 0 ; i--)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == büyü))

dönüş(doğru);

}

}

dönüş(yanlış);

}



//=++============================================ ================++=

// sihirle başabaş seviyesini hesaplamak

void StopLoss_0(int from)

{

çift kar noktası, teklif, sor;

bool;

çift P3_buy, P3_sell;

//

for(int i = OrdersTotal() - 1; i >= 0 ; i--)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if(!( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2) )) devam;

//

if(OrderType() == OP_BUY)

{

teklif = MarketInfo(_Symbol, MODE_BID);

kâr noktası = (teklif - OrderOpenPrice()) / _Point;

is = kâr noktası >= _StopLoss_0_Level + from;

P3_buy = ND( OrderOpenPrice() + * _Point'ten);

//

if( is && ( OrderStopLoss() == 0 || OrderStopLoss() < P3_buy ) )

{

Print("v128-2 b4 >", _Symbol, " | ", _Zaman Çerçevesi,

" -> Teklif=", MarketInfo(_Symbol, MODE_BID),

" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(), " | P3_buy=", P3_buy,

" | d=", _StopLoss_0_Level, " | kâr noktası=", kâr noktası);

if(!OrderModify(OrderTicket(), OrderOpenPrice(), P3_buy, OrderTakeProfit(), 0, CLR_NONE))

Print("v128-2 b4 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SATIN AL > bilet=", OrderTicket(), " > Hata (başabaş) #", GetLastError());

}

}

//

else if(OrderType() == OP_SELL)

{

sor = MarketInfo(_Symbol, MODE_ASK);

kâr noktası = (OrderOpenPrice() - sor) / _Point;

is = kâr noktası >= _StopLoss_0_Level + from;

P3_sell = ND( OrderOpenPrice() - * _Point'ten);

//

if( is && ( OrderStopLoss() == 0 || OrderStopLoss() > P3_sell ) )

{

Print("v128-2 b4 >", _Symbol, " | ", _Zaman Çerçevesi,

" -> Sor =", MarketInfo(_Symbol, MODE_ASK),

" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(), " | P3_sell=", P3_sell,

" | d=", _StopLoss_0_Level, " | kâr noktası=", kâr noktası);

if(!OrderModify(OrderTicket(), OrderOpenPrice(), P3_sell, OrderTakeProfit(), 0, CLR_NONE))

Print("v128-2 b4 > ", _Symbol, " | ", _Zaman Çerçevesi,

" -> SAT -> bilet=", OrderTicket(), " > Hata (başabaş) #", GetLastError());

}

}

}

}

}



//=++============================================ ================++=

// sihirle sondaki durdurmayı hesaplamak

void TrailingStop(int from)

{

çift kar noktası, teklif, sor;

çift fiyat;

//

for(int i = OrdersTotal() - 1; i >= 0 ; i--)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if(!( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2) )) devam;

//

if(OrderType() == OP_BUY)

{

if(_IsTrailingStopProfit) fromprice = OrderOpenPrice() + * _Point'ten;

başka fromprice = OrderStopLoss();

//

teklif = MarketInfo(_Symbol, MODE_BID);

kâr noktası = (teklif - ND(fiyattan)) / _Puan;

//

if( kâr noktası >= _TrailingStopLevel &&

teklif > (OrderStopLoss() + (_TrailingStopLevel + _TrailingStopStep) * _Point))

{

Print("v128-2 v4 >", _Symbol, " | ", _Zaman Çerçevesi,

" -> Teklif=", MarketInfo(_Symbol, MODE_BID),

" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(),

" | d=", _TrailingStopLevel, " | kâr noktası=", kâr noktası);

if(!OrderModify(OrderTicket(), OrderOpenPrice(), ND(teklif - (_TrailingStopLevel) * _Point),

OrderTakeProfit(), 0, CLR_NONE))

{

Print("v128-2 v4 >", _Symbol, " | ", _Zaman Çerçevesi,

" -> SATIN AL > bilet=", OrderTicket(), " > Hata (sondaki durak) #", GetLastError());

}

}

}

//

else if(OrderType() == OP_SELL)

{

if(_IsTrailingStopProfit) fromprice = OrderOpenPrice() - * _Point'ten;

başka fromprice = OrderStopLoss();

//

sor = MarketInfo(_Symbol, MODE_ASK);

kâr noktası = (ND(fiyattan) - sor) / _Puan;

//

if( kâr noktası >= _TrailingStopLevel &&

sor < (OrderStopLoss() - (_TrailingStopLevel + _TrailingStopStep) * _Point))

{

Print("v128-2 v4 >", _Symbol, " | ", _Zaman Çerçevesi,

" -> Ask=", MarketInfo(_Symbol, MODE_ASK),

" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(),

" | d=", _TrailingStopLevel, " | kâr noktası=", kâr noktası);

if(!OrderModify(OrderTicket(), OrderOpenPrice(), ND(ask + (_TrailingStopLevel) * _Point),

OrderTakeProfit(), 0, CLR_NONE))

{

Print("v128-2 v4 >", _Symbol, " | ", _Zaman Çerçevesi,

" -> SAT > bilet=", OrderTicket(), " > Hata (sondaki durak) #", GetLastError());

}

}

}

}

}

}



//=++============================================ ================++=

// Yerel dip bulma. Fiyatı döndürür

double FindPriceMinMax(bool isUp)

{

int kaydırma = 1;

çift fiyat = 0, p0,p1,p2;

süre(fiyat == 0)

{

p0 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 0, shift);

p1 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 1, shift);

p2 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 2, shift);

//Print("v128-2 >", _Symbol, " | ", _Zaman Çerçevesi,

// " > eleme=", shift, " | p0=", p0, " | p1=", p1, " | p2=", p2);

eğer(isUp)

{

if(p0 !=0 && p0 == p1) // köşe bulundu

fiyat = p0;

}

başka

{

if(p0 != 0 && p0 == p2) // alt bulundu

fiyat = p0;

}

vardiya++;

}

//Print("v128-2 >", _Symbol, " | ", _Zaman Çerçevesi,

// " -> iade(fiyat)=", fiyat);

iade(fiyat);

}



//============================================== ====================

// Dosyadan değişkeni oku.

// Dosya mevcut değilse, bir dosya oluşturun ve değişkeni dosyaya yazın

double _FileReadWriteDouble(dize dosya adı, çift değer)

{

int h1 = FileOpen(dosya adı, FILE_BIN);

eğer(h1 > 0)

{

değer = FileReadDouble(h1, DOUBLE_VALUE);

DosyaKapat(h1);

}

başka

{

h1 = FileOpen(dosya adı, FILE_BIN|FILE_WRITE);

FileWriteDouble(h1, değer, DOUBLE_VALUE);

DosyaKapat(h1);

}

geri dönüş değeri);

}



//=============================================== ====================

// Dosyaya değişken yaz

void _FileWriteDouble(dize dosya adı, çift değer)

{

int h1 = FileOpen(dosyaadı, FILE_BIN|FILE_WRITE);

FileWriteDouble(h1, değer, DOUBLE_VALUE);

DosyaKapat(h1);

}