Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
Ilan_RSI_mm_extr07
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
#property copyright ""
#property link ""
// äîïèñûâàë runik, ngb2008@mail.ru äëÿ èñïîëüçîâàíèÿ íåîáõîäèìî ãðóçèòü ãðàôèêè h1 h4 d1 w
//Íà÷èíàåì ðàáîòàòü âíóòðè ñåññèè, åñëè ìû âûõîäèì çà ïðåäåëû ñåññèîíûõ
//ýêñòðåìóìîâ, òî íà÷èíàåì ðàáîòàòü ïî äíåâíûì ýêñòðåìóìàì, çàòåì ïî íåäåëüíûì, ìåñÿ÷íûì è ò.ä.
// Ïðè ïðîáèòè ýêñòðåìóìîâ âîçðàñòàåò ïèïñòåï, â ìàññèâå pexpo ìíîæèòåëè
// êñòàòè, êîãäà ìû ïåðåæèëè áîëüøîé òðåíä(íî ìû íå çàêðûëè ñåðèþ), òî ïîñëå ýòîãî íàñòóïèë ôëåò, ÷åðåç îäíó íåäåëþ ñäåëêè ñíîâà íà÷èíàþò îòêðûâàòüñÿ
//áîëüøèìè ëîòàìè íî ïðè ìàëîì ïèïñòåïå è ìû áûñòðî âûõîäèì â ïðîôèò
// ñìîòðåòü òàêæå Ìíîæèòåëè ïèïñòåïà
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
double Stoploss = 5000.0; // Ýòè òðè ïàðàìåòðà íå ðàáîòàþò
double TrailStart = 100.0;
double TrailStop = 100.0;
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
extern string ñ1 = "Îñíîâíûå ïàðàìåòðû";
extern double LotExponent = 2; // óìíîæåíèå ëîòîâ â ñåðèè ïî ýêñïîíåíòå äëÿ âûâîäà â áåçóáûòîê. ïåðâûé ëîò 0.1, ñåðèÿ: 0.15, 0.26, 0.43 ...
extern double Lots = 0.1; // òåïåðü ìîæíî è ìèêðîëîòû 0.01 ïðè ýòîì åñëè ñòîèò 0.1 òî ñëåäóþùèé ëîò â ñåðèè áóäåò 0.16
extern double Risk = 0; // ïåðâàÿ ñäåëêà ðàçìåðîì â % îò äåïî
extern double TakeProfit = 20.0; // ìèíèìàëüíûé òåéê ïðîôèò
extern double TakeProfitLast = 5.0; // ìèíèìàëüíûé òåéê ïðîôèò
extern double PipStep = 30; // øàã ïåðâîãî êîëåíà
extern double TrendPS = 14; // øàã îòêðûòèÿ êîëåí ïî òðåíäó, åñëè =0 òî ïî òðåíäó íå ðàáîòàåì, íåëüçÿ äåëàòü ìåíüøå èëè ðàâíûì óðîâíþ ñòîïîâ
extern int MaxTrades = 10; // ìàêñèìàëüíî êîëè÷åñòâî îäíîâðåìåííî îòêðûòûõ îðäåðîâ
extern string s1 = "Âñïîìîãàòåëüíûå ïàðàìåòðû";
extern int MagicNumber = 54321; // ìàãèê
extern double slip = 3.0; // ïðîñêàëüçûâàíèå
extern int lotdecimal = 2; // 2 - ìèêðîëîòû 0.01, 1 - ìèíè ëîòû 0.1, 0 - íîðìàëüíûå ëîòû 1.0
extern double LastTrade=100; // ïîñëå ýòîãî îðäåðà ðàçìåðû îðäåðîâ ñòàíîâÿòüñÿ = ïîñëåäíåìó îòêðûòîìó à òåéê ïåðåíîñèòñÿ â òî÷êó áåçóáûòîê +1 ïóíêò
extern double PercUroven=0; // Óðîâåíü â % ïîñëå êîòîðîãî èëàí íå ðàáîòàåò íàïðèìåð 600 èëè 1000
double otkat = 0; // îòêàò â % (ñìîòðèòå ïëàí Á ) åñëè îòêàò áîëüøå 0 òî ïðîôèò
// âûñòàâëÿåòñÿ èëè ïî óðîâíþ îòêàòà èëè ïî óðîâíþ áåçóáûòêà ïëþñ òåéêïðîôèò (â çàâèñèìîñòè îò òîãî ÷òî áîëüøå)
// òðåíä îïðåäåëÿåòñÿ ìàêñèìàëüíàÿ öåíà ñäåëêè - ìèíèìàëüíîé öåíà ñäåëêè
extern string s2 = "Ïàðàìåòðû ñâÿçàííûå ñ âðåìåíåì";
extern int TFIlanX=0; // òàéìôðåéì íà êîòîðîì èëàí îòêðûâàåò ñäåëêè ñì. mper ïðè = 5 - H1
extern int TFInd=5; // òàéìôðåéì íà êîòîðîì ðàáîòàåò èíäèêàòîð âñòðîåííûé â èëàí
extern int nH1=0; // =3 ïîñëå 3 ñäåëêè ïåðåêëþ÷àåìñÿ íà ÒÔ Í1
extern int nH4=0; // =5 ïîñëå 5 ñäåëêè ïåðåêëþ÷àåìñÿ íà òô Í4
//extern int flethour1=0; // íî÷üþ â ïåðèîä ñ 1 äî 9
//extern int flethour2=0; // óìåíüøàåì ïèïñòåï â
//extern double fletlotexp=2; // â äâà
string s3 = "Ìíîæèòåëè ïèïñòåïà ïðè ïåðåõîäå ñ óðîâíÿ";
double SessionPipExpo=3;
double DayPipExpo=5;
double WeekPipExpo=8;
double MonthPipExpo=13;
double KvartalPipExpo=21;
double PolGodaPipExpo=34;
extern string ñ = "Ïàðàìåòðû CÒÎÕÀÑÒÈÊÀ";
extern int IndStep = 0; // åñëè >0 òî íàïðèìåð ïîñëå 4 ñäåëêè ïðè îòêðûòèè øàãà ïðèíèìàåì âî âíèìàíèå èíäèêàòîð, åñëè èíäèêàòîð íå ïîêàçûâàåò íóæíîå íàïðàâëåíèå òî íå îòêðûâàåìñÿ
//----------------------------------------------------------- ýòà ÷àñòü êîäà èç ìîäèôèêàöèè èëàíà ñäåëàíîé BigGun c fx4u.ru
extern int KPeriod = 5;
extern int DPeriod = 4;
extern int Slowing = 3;
extern int Method =MODE_SMMA;
extern int Price =PRICE_CLOSE;
//-----------------------------------------------------------
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
bool UseEquityStop = FALSE;
double TotalEquityRisk = 20.0;
bool UseTrailingStop = FALSE;
bool UseTimeOut = FALSE;
double MaxTradeOpenHours = 48.0;
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
int nt = 6; // êîëè÷åñòâî âðåìåííûõ ìàñøòàáîâ
double max[6],min[6]; // ýêñòðåìóìû öåí
int bars1[6]={8,8,5,22,13,26}; // ñêîëüêî áàðîâ äëÿ îïðåäåëåíèÿ ýêñòðåìóìîâ
int bper[6]={60,240,1440,1440,10080,10080}; // êàêèõ áàðîâ íàäî äëÿ îïðåäåëåíèÿ ýêñòðåìóìîâ
double pexpo[6]={3,5,8,13,21,34}; // ìíîæèòåëè äëÿ ïèïñòåïà ïðè ïðîáèòèè ýêñòðåìóìîâ
int mper[10]={0,1,5,15,30,60,240,1440,10080,43200};
int TFIlan=0;
int ccc=0;
double lota[30]; // ëîòû
int modea[30]; // òèï îðäåðà OP_BUY 0 , OP_SELL 1 , OP_BUYLIMIT 2 , OP_SELLLIMIT 3 , OP_BUYSTOP 4 , OP_SELLSTOP 5
double opa[30]; // öåíà îòêðûòèÿ
double sla[30]; // ñòîïëîññ
double tpa[30]; // ïðîôèò
string comma[30]; // êîììåíòàðèè
datetime tima[30]; // âðåìÿ îòêðûòèÿ ñäåëêè
double profa[30];
int ticka[30];
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
double PriceTarget, StartEquity, BuyTarget, SellTarget ;
double AveragePrice, SellLimit, BuyLimit ;
double LastBuyPrice, LastSellPrice, Spread;
bool flag;
string EAName = "Ilan_extr07";
int timeprev = 0, expiration;
int NumOfTrades = 0;
double iLots;
int cnt = 0, total;
double Stopper = 0.0;
bool TradeNow = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
int ticket;
bool NewOrdersPlaced = FALSE;
double AccountEquityHighAmt, PrevEquity;
int TrendRe=0; // ïðè =0 ðåæèì îáû÷íîãî èëàíà, ïðè =1 ðåæèì òðåíä, ò.å. äîêóïàåìñÿ ïî òðåíäó
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
int init() {
Spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
pexpo[0]=SessionPipExpo;
pexpo[1]=DayPipExpo;
pexpo[2]=WeekPipExpo;
pexpo[3]=MonthPipExpo;
pexpo[4]=KvartalPipExpo;
pexpo[5]=PolGodaPipExpo;
return (0);
}
int deinit() {
return (0);
}
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
int start() {
if (AccountMargin()>0 && PercUroven>0)
if (PercUroven>AccountEquity()/AccountMargin()*100) { return(0);}
if (TrendRe==0)
{
int total1 = CountTrades();
double AveragePrice1 = 0;
double Count1 = 0;
double Profit1=0;
double ProfitPoint=0;
int dir = -1;
for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
AveragePrice1 += OrderOpenPrice() * OrderLots();
Count1 += OrderLots();
Profit1+= OrderProfit();
if (OrderType() == OP_BUY) dir=0;
if (OrderType() == OP_SELL) dir=1;
}
}
}
if (total1 > 2)
{
AveragePrice1 = NormalizeDouble(AveragePrice1 / Count1, Digits);
int ProfitPips=TakeProfit;
if (total1>LastTrade) ProfitPips=TakeProfitLast;
if (dir==0 && TrendRe==0) {ProfitPoint=AveragePrice1+ProfitPips*Point;if (Bid>=ProfitPoint) CloseThisSymbolAll(); }
if (dir==1 && TrendRe==0) {ProfitPoint=AveragePrice1-ProfitPips*Point;if (Ask<=ProfitPoint) CloseThisSymbolAll(); }
}
}
int hbars=FillExtra();
// Print(" ",max[0]," ",min[0]," ",max[1]," ",min[1]," ",max[2]," ",min[2]," ",max[3]," ",min[3]," ",max[4]," ",min[4]," ",max[5]," ",min[5]);
double PrevCl;
double CurrCl;
if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice);
if (UseTimeOut) {
if (TimeCurrent() >= expiration) {
CloseThisSymbolAll();
Print("Closed All due to TimeOut");
}
}
total = CountTrades();
if (TrendPS>0) TrenT();
TFIlan=TFIlanX;
if (nH1!=0 && total>=nH1) TFIlan=5;
if (nH4!=0 && total>=nH4) TFIlan=6;
if (timeprev == iTime(NULL,mper[TFIlan],0)) return (0);
timeprev = iTime(NULL,mper[TFIlan],0);
double CurrentPairProfit = CalculateProfit();
if (UseEquityStop) {
if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
CloseThisSymbolAll();
Print("Closed All due to Stop Out");
NewOrdersPlaced = FALSE;
}
}
if (total == 0) flag = FALSE;
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
LongTrade = TRUE;
ShortTrade = FALSE;
break;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
LongTrade = FALSE;
ShortTrade = TRUE;
break;
}
}
}
if (total > 0 && total <= MaxTrades) {
RefreshRates();
LastBuyPrice = FindMinBuyPrice();
LastSellPrice = FindMaxSellPrice();
if (LongTrade && LastBuyPrice - Ask >= PipStepX(0) * Point && alert(1)>0) TradeNow = TRUE;
if (ShortTrade && Bid - LastSellPrice >= PipStepX(1) * Point && alert(-1)<0) TradeNow = TRUE;
}
if (total < 1) {
ShortTrade = FALSE;
LongTrade = FALSE;
TradeNow = TRUE;
StartEquity = AccountEquity();
}
if (TradeNow) {
// LastBuyPrice = FindLastBuyPrice();
// LastSellPrice = FindLastSellPrice();
double MaxLot1=FindMaxLots();
TrendRe=0;
if (ShortTrade) {
NumOfTrades = total;
iLots = NormalizeDouble(MaxLot1*LotExponent, lotdecimal);
if (NumOfTrades>=LastTrade && LastTrade>0) iLots = MaxLot1;
RefreshRates();
ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
if (ticket < 0) {
Print("Error: ", GetLastError());
return (0);
}
// LastSellPrice = FindLastSellPrice();
TradeNow = FALSE;
NewOrdersPlaced = TRUE;
} else {
if (LongTrade) {
NumOfTrades = total;
iLots = NormalizeDouble(MaxLot1*LotExponent, lotdecimal);
if (NumOfTrades>=LastTrade && LastTrade>0) iLots = MaxLot1;
ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
if (ticket < 0) {
Print("Error: ", GetLastError());
return (0);
}
// LastBuyPrice = FindLastBuyPrice();
TradeNow = FALSE;
NewOrdersPlaced = TRUE;
}
}
}
if (TradeNow && total < 1) {
PrevCl = iClose(Symbol(), mper[TFIlan], 2);
CurrCl = iClose(Symbol(), mper[TFIlan], 1);
SellLimit = Bid;
BuyLimit = Ask;
TrendRe=1;
if (!ShortTrade && !LongTrade) {
NumOfTrades = total;
iLots = NormalizeDouble(GetLots() * MathPow(LotExponent, NumOfTrades), lotdecimal);
if (NumOfTrades>=LastTrade && LastTrade>0) iLots = NormalizeDouble(GetLots() * MathPow(LotExponent, LastTrade), lotdecimal);
if (PrevCl > CurrCl) {
if (iRSI(NULL, mper[TFInd], 14, PRICE_CLOSE, 1) > 30.0) { //áîëüøå >
ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
if (ticket < 0) {
Print("Error: ", GetLastError());
return (0);
}
// LastBuyPrice = FindLastBuyPrice();
NewOrdersPlaced = TRUE;
}
} else {
if (iRSI(NULL, mper[TFInd], 14, PRICE_CLOSE, 1) < 70.0) { // ìåíüøå <
ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
if (ticket < 0) {
Print("Error: ", GetLastError());
return (0);
}
// LastSellPrice = FindLastSellPrice();
NewOrdersPlaced = TRUE;
}
}
if (ticket > 0) expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
TradeNow = FALSE;
}
}
total = CountTrades();
AveragePrice = 0;
double Count = 0;double maxpr=0; double minpr=10000000;
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
AveragePrice += OrderOpenPrice() * OrderLots();
Count += OrderLots();
if (OrderOpenPrice()>maxpr) maxpr=OrderOpenPrice();
if (OrderOpenPrice()<minpr) minpr=OrderOpenPrice();
}
}
}
if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
if (NewOrdersPlaced) {
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
PriceTarget = AveragePrice + TakeProfit * Point;
double OtkatTarget=NormalizeDouble(minpr+otkat/100*(maxpr-minpr+PipStepX(0)*Point), Digits);
if (otkat>0 && OtkatTarget>PriceTarget) PriceTarget=OtkatTarget;
if (NumOfTrades>LastTrade+1) PriceTarget = AveragePrice + TakeProfitLast * Point;
BuyTarget = PriceTarget;
Stopper = AveragePrice - Stoploss * Point;
flag = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
PriceTarget = AveragePrice - TakeProfit * Point;
OtkatTarget=NormalizeDouble(maxpr-otkat/100*(maxpr-minpr+PipStepX(1)*Point), Digits);
if (otkat>0 && OtkatTarget<PriceTarget) PriceTarget=OtkatTarget;
if (NumOfTrades>LastTrade+1) PriceTarget = AveragePrice - TakeProfitLast * Point;
SellTarget = PriceTarget;
Stopper = AveragePrice + Stoploss * Point;
flag = TRUE;
}
}
}
}
if (NewOrdersPlaced && TrendRe==0) {
if (flag == TRUE) {
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(), AveragePrice, OrderStopLoss(), PriceTarget, 0, Yellow);
NewOrdersPlaced = FALSE;
}
}
}
return (0);
}
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
int CountTrades() {
int count = 0;
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
}
return (count);
}
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
void CloseThisSymbolAll() {
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
}
Sleep(1000);
}
}
}
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
int OpenPendingOrder(int pType, double pLots, double pPrice, int pSlippage, double ad_24, int ai_32, int ai_36, string a_comment_40, int a_magic_48, int a_datetime_52, color a_color_56) {
int l_ticket_60 = 0;
int l_error_64 = 0;
int l_count_68 = 0;
int li_72 = 100;
switch (pType) {
case 2:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, pLots, pPrice, pSlippage, StopLong(ad_24, ai_32), TakeLong(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(1000);
}
break;
case 4:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, pLots, pPrice, pSlippage, StopLong(ad_24, ai_32), TakeLong(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
break;
case 0:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
RefreshRates();
l_ticket_60 = OrderSend(Symbol(), OP_BUY, pLots, Ask, pSlippage, StopLong(Bid, ai_32), TakeLong(Ask, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
break;
case 3:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, pLots, pPrice, pSlippage, StopShort(ad_24, ai_32), TakeShort(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
break;
case 5:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, pLots, pPrice, pSlippage, StopShort(ad_24, ai_32), TakeShort(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
break;
case 1:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_SELL, pLots, Bid, pSlippage, StopShort(Ask, ai_32), TakeShort(Bid, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
}
return (l_ticket_60);
}
double StopLong(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
else return (ad_0 - ai_8 * Point);
}
double StopShort(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
else return (ad_0 + ai_8 * Point);
}
double TakeLong(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
else return (ad_0 + ai_8 * Point);
}
double TakeShort(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
else return (ad_0 - ai_8 * Point);
}
double CalculateProfit() {
double ld_ret_0 = 0;
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();
}
return (ld_ret_0);
}
void TrailingAlls(int pType, int ai_4, double a_price_8) {
int l_ticket_16;
double l_ord_stoploss_20;
double l_price_28;
if (ai_4 != 0) {
for (int l_pos_36 = OrdersTotal() - 1; l_pos_36 >= 0; l_pos_36--) {
if (OrderSelect(l_pos_36, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
l_ticket_16 = NormalizeDouble((Bid - a_price_8) / Point, 0);
if (l_ticket_16 < pType) continue;
l_ord_stoploss_20 = OrderStopLoss();
l_price_28 = Bid - ai_4 * Point;
if (l_ord_stoploss_20 == 0.0 || (l_ord_stoploss_20 != 0.0 && l_price_28 > l_ord_stoploss_20)) OrderModify(OrderTicket(), a_price_8, l_price_28, OrderTakeProfit(), 0, Aqua);
}
if (OrderType() == OP_SELL) {
l_ticket_16 = NormalizeDouble((a_price_8 - Ask) / Point, 0);
if (l_ticket_16 < pType) continue;
l_ord_stoploss_20 = OrderStopLoss();
l_price_28 = Ask + ai_4 * Point;
if (l_ord_stoploss_20 == 0.0 || (l_ord_stoploss_20 != 0.0 && l_price_28 < l_ord_stoploss_20)) OrderModify(OrderTicket(), a_price_8, l_price_28, OrderTakeProfit(), 0, Red);
}
}
Sleep(1000);
}
}
}
}
double AccountEquityHigh() {
if (CountTrades() == 0) AccountEquityHighAmt = AccountEquity();
if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;
else AccountEquityHighAmt = AccountEquity();
PrevEquity = AccountEquity();
return (AccountEquityHighAmt);
}
double FindMinBuyPrice() {
double l_ord_open_price_8;
double l_ticket_24;
double ld_unused_0 = 0;
double l_ticket_20 = 1000000000;
for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
l_ticket_24 = OrderOpenPrice();
if (l_ticket_24 < l_ticket_20) {
l_ord_open_price_8 = OrderOpenPrice();
l_ticket_20 = l_ticket_24;
}
}
}
return (l_ord_open_price_8);
}
double FindMaxSellPrice() {
double l_ord_open_price_8;
double l_ticket_24;
double ld_unused_0 = 0;
double l_ticket_20 = 0;
for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
l_ticket_24 = OrderOpenPrice();
if (l_ticket_24 > l_ticket_20) {
l_ord_open_price_8 = OrderOpenPrice();
l_ticket_20 = l_ticket_24;
}
}
}
return (l_ord_open_price_8);
}
double GetLots()
{
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
if(Risk!=0)
{
double lot = NormalizeDouble(AccountBalance() * Risk/100 / 1000.0, lotdecimal);
if(lot < minlot) lot = minlot;
}
else lot=Lots;
return(lot);
}
int FillExtra()
{
int r=0;
if (ccc==1 && Minute()<1) ccc=0;
if (ccc==0 && Minute()<2)
{
ccc=1;
for (int i=0;i<nt;i++)
{
max[i]=iHigh(NULL,bper[i],iHighest(NULL,bper[i],MODE_HIGH,bars1[i],1));
min[i]=iLow(NULL,bper[i],iLowest(NULL,bper[i],MODE_LOW,bars1[i],1));
}
}
return(r);
}
double PipStepX(int dir)
{
double r=PipStep;
//if (Hour()>flethour1 && Hour()<flethour2) r=MathCeil(PipStep/fletlotexp);
if (dir==0) // buy
{
for (int i=0;i<nt;i++)
{
if (Ask<min[i]) r=pexpo[i]*PipStep;
}
}
if (dir==1) // buy
{
for (i=0;i<nt;i++)
{
if (Bid>max[i]) r=pexpo[i]*PipStep;
}
}
return(r);
}
int alert(int d6) {
int x=0;
if (IndStep==0 || IndStep<CountTrades()) return(d6);
if(iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)> 20 &&
iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)< 80 &&
iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)>
iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_SIGNAL,0)) x=1;
if(iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)< 80 &&
iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)> 20 &&
iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)<
iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_SIGNAL,0)) x=-1;
return(x);
}
int TrenT()
{
int t=FillArray(MagicNumber);
// ïîäñ÷èòûâåì ñêîëüêî îòêðûòî îðäåðîâ ñ îäèíàêîâûì øàãîì ïî òðåíäó è åñòü ëè îðäåðà îòêðûòûå óæå ïðîòèâ òðåíäà ñ áîëüøèì ëîòîì
double minl1=10000;
if (Risk==0) minl1=Lots;
if (Risk>0)
{
for (int i=0;i<30;i++)
{
if (minl1>lota[i] && lota[i]>0) minl1=lota[i];
}
} // Risk
if (lota[ArrayMaximum(lota)]>minl1) return(0);
ModifTrendOrders();
//double minl=FindLastSellPrice1();
//double maxl=FindLastBuyPrice1();
TrendRe=1;
int ii=-1; int jj=-1; // èùåì ñàìû âåðõíèé áàé è ñàìû íèæíèé ñåëë îðäåð
double lastb=0; double lasts=10000000;
// äîêóïàåì ïîçèöèè ïî òðåíäó
for(int cnt=0;cnt<30;cnt++)
{
if (modea[cnt]==0 && opa[cnt]>lastb && opa[cnt]>0){lastb=opa[cnt];ii=cnt;}
if (modea[cnt]==1 && opa[cnt]<lasts && opa[cnt]>0){lasts=opa[cnt];jj=cnt;}
}
if (modea[0]==0)
{
if (Ask>=lastb+TrendPS*Point)
{
ticket=OrderSend(Symbol(),OP_BUY,minl1,Ask,slip,0,0,"trend",MagicNumber,0,Green);
Print(" ticket ",ticket, " lastb ",lastb, " lasts ",lasts," Bid ",Bid, " minl1 ",minl1);
if (ticket>0)
{
for (i=0;i<30;i++)
{
if ((opa[i]<=Ask-TrendPS*1.5*Point) && (sla[i]<Bid-TrendPS*Point) && opa[i]>0)
{
if (ticka[i]>0)
{
OrderSelect(ticka[i],SELECT_BY_TICKET);
OrderModify(ticka[i],opa[i],Bid-TrendPS*Point,0,0,Green);
}
}
}
Sleep(500); return(0);
}
}
}
if (modea[0]==1)
{
if (Bid<=lasts-TrendPS*Point)
{
ticket=OrderSend(Symbol(),OP_SELL,minl1,Bid,slip,0,0,"trend",MagicNumber,0,Red);
Print(" ticket ",ticket, " lastb ",lastb, " lasts ",lasts," Bid ",Bid, " minl1 ",minl1);
if (ticket>0)
{
for (i=0;i<30;i++)
{
if ((opa[i]>=Bid+TrendPS*1.5*Point) && ((sla[i]>Ask+TrendPS*Point) || (sla[i]==-1)) && opa[i]>0)
{
if (ticka[i]>0)
{
OrderSelect(ticka[i],SELECT_BY_TICKET);
OrderModify(ticka[i],opa[i],Ask+TrendPS*Point,0,0,Red);
}
}
}
Sleep(500);return(0);
}
}
}
}
int FillArray(int mn1) // ïðîöåäóðà ïîäñ÷åòà âñåõ îðäåðîâ äàííîãî ýêñïåðòà ïî äàííîìó èíñòðóìåíòó
{
ArrayInitialize(lota,-1);
ArrayInitialize(modea,-1);
ArrayInitialize(opa,-1);
ArrayInitialize(sla,-1);
ArrayInitialize(tpa,-1);
ArrayInitialize(tima,-1);
ArrayInitialize(ticka,-1);
ArrayInitialize(profa,-0.001);
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
c++;
lota[cnt]=OrderLots();
modea[cnt]=OrderType();
opa[cnt]=OrderOpenPrice();
sla[cnt]=OrderStopLoss();
tpa[cnt]=OrderTakeProfit();
comma[cnt]=OrderComment();
tima[cnt]=OrderOpenTime();
ticka[cnt]=OrderTicket();
profa[cnt]=OrderProfit();
}
}
// for (cnt=0;cnt<to;cnt++) { Print(lota[cnt]," ", modea[cnt], " ", opa[cnt], " ", sla[cnt], " ", tpa[cnt], " ", tima[cnt], " ", ticka[cnt] ); }
return(c);
}
int ModifTrendOrders()
{
int k=0;
for (int i=0;i<OrdersTotal();i++)
{
if (profa[i]<=0 && profa[i]!=-0.001) k=k+1;
}
if (k>=2)
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderProfit()>0) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
}
Sleep(1000);
}
}
}
return(0);
}
double FindMaxLots() {
double l_ord_open_price_8;
double l_ticket_24;
double ld_unused_0 = 0;
double l_ticket_20 = 0;
for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
l_ticket_24 = OrderLots();
if (l_ticket_24 > l_ticket_20) {
l_ticket_20 = l_ticket_24;
}
}
}
return (l_ticket_20);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---