Lütfen danışmanların ücretsiz olarak yazılmasına yardımcı olun. 5 farklı fikir. - sayfa 15
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
Her şey. Apaçık. Yardım etmeye "denedin". Biraz daha fikir paylaşmanın zamanının geldiğini hissediyorum.
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);
}