Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
billwiliamsea
//+------------------------------------------------------------------+
//| ID.mq4 |
//| Copyright © 2006, Oasis |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Oasis"
extern double Lots = 1;
extern double MaxLots = 10;
extern double UnitLot = 1000;
extern bool Reinvest = false;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TotalOrders = 1;
extern int AlligatorMode = 1; // 2 - RedLine (íå ïðîâåðåíî) 1 - All (ïðîâåðåíî)
// --- --- ---
extern bool Buy = true; // - ïðîâåðåíî
extern bool Sell = true; // - ïðîâåðåíî
extern bool TwoPosition = false; // - ïðîâåðåíî
extern bool ACCross = false; // - ïðîâåðåíî
extern bool AC2 = false; // - ïðîâåðåíî
extern bool AC3 = false; // - ïðîâåðåíî
extern bool AOCross = false; // - ïðîâåðåíî
extern bool AOSaucer = false; // - ïðîâåðåíî
extern bool AO2Peak = false; // - îøèáêà
extern bool FractalsSignal = false; // - ïðîâåðåíî
extern bool Ang = false; // - íå ïðîâåðåíî
extern bool CloseZone = false; // - ïðîâåðåíî
extern bool CloseFractal = false; // - ïðîâåðåíî
extern bool CloseAlligator = false; // - ïðîâåðåíî
//extern bool TradingZone = false; // - íå ðàáîòàåò
// Ãëîáàëüíûå ïåðåìåííûå
datetime TimeOpen, TimeID, Time1, Time2, TimeOpenFra;
datetime TimePeak, PreTimePeak;
double Peak, PrePeak, Lot;
double FractalUpper, FractalLower;
double SL, TP;
int Ticket;
// --- ïåðåìåííûå Zone
bool BarsGreen, BarsRed;
double PriceZone;
// Èíèöèàëèçàòîð âûïîëíåíèÿ íà öåíå îòêðûòèÿ
bool StartProgram()
{
if(TimeOpen != Time[0])
{
TimeOpen = Time[0];
return(true);
}else
return(false);
}
void init()
{
// --- Ïåðâè÷íàÿ ïðîâåðêà (50 ïîñëåäíèõ áàðîâ)
for(int a = 50; a >= 1; a--)
{
Fractal(a);
AOModel(a);
FiveBars(a);
// --- îòêðûòèå ôðàêòàëîì BUY
if(OrdersTotal() < TotalOrders &&
FractalsSignal == true && High[a] >= FractalUpper &&
TimeID != Time1 && High[a] > AlligatorMax(a))
TimeID = Time1;
// --- îòêðûòèå ôðàêòàëîì SELL
if(OrdersTotal() < TotalOrders &&
FractalsSignal == true && Low[a] <= FractalLower &&
TimeID != Time2 && Low[a] < AlligatorMin(a))
TimeID = Time2;
}
Print("Ïåðâè÷íàÿ ïðîâåðêà çàêîí÷åíà.");
} // Çàâåðøåíèå êîäà íà init()
void start()
{
// --- --- --- --- --- ÒÎÐÃÎÂÎÅ ßÄÐÎ --- --- --- --- ---
// çàêðûòèå â çîíå
if(BarsGreen == true)
{
if(Bid < PriceZone)
{
BarsGreen = false;
if(CloseZone) CloseAll();
}
}
if(BarsRed == true)
{
if(Bid > PriceZone)
{
BarsRed = false;
if(CloseZone) CloseAll();
}
}
// ---
// --- îòêðûòèå ôðàêòàëîì BUY
if(FractalsSignal == true && Buy == true &&
Bid >= FractalUpper && TimeID != Time1 &&
( (AlligatorMode == 2 && Bid > AlligatorRed()) ||
(AlligatorMode == 1 && Bid > AlligatorMax()) ))
{
if(TwoPosition == true && OrdersTotal() != 0)
{
if(_OrderType() == OP_SELL) CloseAll();
}
if(OrdersTotal() < TotalOrders) Buy();
TimeID = Time1;
TimeOpenFra = Time[0];
}
// --- îòêðûòèå ôðàêòàëîì SELL
if(FractalsSignal == true && Sell == true &&
Bid <= FractalLower && TimeID != Time2 &&
( (AlligatorMode == 2 && Bid < AlligatorRed()) ||
(AlligatorMode == 1 && Bid < AlligatorMin()) ))
{
if(TwoPosition == true && OrdersTotal() != 0)
{
if(_OrderType() == OP_BUY) CloseAll();
}
if(OrdersTotal() < TotalOrders) Sell();
TimeID = Time2;
TimeOpenFra = Time[0];
}
// --- îòêðûòèå àíãóëÿöèåé BUY
if(Ang == true && OrdersTotal() < TotalOrders &&
Low[1] < Low[2] && Low[1] < Low[3] &&
High[1] < AlligatorMin() && Bid > High[1])
Buy();
// --- îòêðûòèå àíãóëÿöèåé SELL
if(Ang == true && OrdersTotal() < TotalOrders &&
High[1] > High[2] && High[1] > High[3] &&
Low[1] > AlligatorMax() && Bid < Low[1])
Sell();
if(StartProgram()) // --- êîä íà öåíå îòêðûòèÿ
{
// Âûïîëíåíèå ôóíêöèé
AOModel();
Fractal();
FiveBars();
// BUY
if(OrdersTotal() < TotalOrders &&
((AC2 == true && ACBuy1()) ||
(AC3 == true && ACBuy2()) ||
(ACCross == true && ACBuy3()) ||
(AOCross == true && AOBuy1()) ||
(AOSaucer == true && AOBuy2()) ||
(AO2Peak == true && AOModel() == 1)) &&
Bid > AlligatorMax())
Buy();
// SELL
if(OrdersTotal() < TotalOrders &&
((AC2 == true && ACSell1()) ||
(AC3 == true && ACSell2()) ||
(ACCross == true && ACSell3()) ||
(AOCross == true && AOSell1()) ||
(AOSaucer == true && AOSell2()) ||
(AO2Peak == true && AOModel() == 2)) &&
Bid < AlligatorMin())
Sell();
// Çàêðûòèå ôðàêòàëîì (ïîääåðæêà îäíîãî îðäåðà) --- íà öåíå îòêðûòèÿ
if(OrdersTotal() != 0 && CloseFractal == true)
{
if(OrderSelect(Ticket, SELECT_BY_TICKET))
{
if(OrderType() == OP_BUY && iFractals(NULL, 0, MODE_UPPER, 3) != 0 &&
Ask > OrderOpenPrice() + (Ask - Bid) + 1*Point)
OrderClose(Ticket, Lots, Bid, 3, Orange);
if(OrderType() == OP_SELL && iFractals(NULL, 0, MODE_LOWER, 3) != 0 &&
Bid < OrderOpenPrice() - (Ask - Bid) - 1*Point)
OrderClose(Ticket, Lots, Ask, 3, Orange);
}
}
// Çàêðûòèå Àëëèãàòîðîì (Çóáû Àëëèãàòîðà) --- íà öåíå îòêðûòèÿ !! íå çàáûòü ïîääåðæêà îäíîãî îðäåðà
if(OrdersTotal() != 0 && CloseAlligator == true)
{
if(OrderSelect(Ticket, SELECT_BY_TICKET))
{
if(OrderType() == OP_BUY && Close[1] < AlligatorRed() && TimeOpenFra != Time[0])
CloseAll();//OrderClose(Ticket, Lots, Bid, 3, Orange);
if(OrderType() == OP_SELL && Close[1] > AlligatorRed() && TimeOpenFra != Time[0])
CloseAll();//OrderClose(Ticket, Lots, Bid, 3, Orange);
}
}
} // îêîí÷àíèå êîäà íà StartProgram()
// --- ÎÊÎÍ×ÀÍÈÅ ÒÎÐÃÎÂÎÃÎ ßÄÐÀ ---
// --- --- --- Ìîäåëü ïîâåäåíèÿ - Òîðãîâëÿ â çîíàõ
// !!ÎÊÎÍ×ÀÍÈÅ!! --- Ìîäåëü ïîâåäåíèÿ - Òîðãîâëÿ â çîíàõ
} // Çàâåðøåíèå êîäà íà Start()
// Ôóíêöèîíàë
// Ñèãíàëû AC --- --- --- Âûïîëíåíèå íà öåíå îòêðûòèÿ
// --- Buy
bool ACBuy1() // Äâà çåëåíûõ ñòîëáöà âûøå 0
{
if(AC(1) > AC(2) &&
AC(2) > AC(3) &&
AC(3) < AC(4) &&
AC(3) > 0)
return(true); else return(false);
}
bool ACBuy2() // Òðè çåëåíûõ ñòîëáöà íèøå 0
{
if(AC(1) > AC(2) &&
AC(2) > AC(3) &&
AC(3) > AC(4) &&
AC(4) < AC(5) &&
((AC(1) < 0) ||
(AC(1) > 0 && AC(2) < 0)))
return(true); else return(false);
}
bool ACBuy3() // Äâà çåëåíûõ ñòîëáöà ïðè ïåðåñå÷åíèè
{
if(AC(1) > AC(2) &&
AC(2) > AC(3) &&
AC(3) < AC(4) &&
AC(1) > 0 &&
AC(2) < 0)
return(true); else return(false);
}
// --- Sell
bool ACSell1() // Äâà êðàñíûõ ñòîëáöà íèæå 0
{
if(AC(1) < AC(2) &&
AC(2) < AC(3) &&
AC(3) > AC(4) &&
AC(3) < 0)
return(true); else return(false);
}
bool ACSell2() // Òðè êðàñíûõ ñòîëáöà âûøå 0
{
if(AC(1) < AC(2) &&
AC(2) < AC(3) &&
AC(3) < AC(4) &&
AC(4) > AC(5) &&
((AC(1) > 0) ||
(AC(1) < 0 && AC(2) > 0)))
return(true); else return(false);
}
bool ACSell3() // Äâà êðàñíûõ ñòîëáöà ïðè ïåðåñå÷åíèè
{
if(AC(1) < AC(2) &&
AC(2) < AC(3) &&
AC(3) > AC(4) &&
AC(1) < 0 &&
AC(2) > 0)
return(true); else return(false);
}
// Ñèãíàëû AO --- --- --- Âûïîëíåíèå íà öåíå îòêðûòèÿ
// --- Buy
bool AOBuy1() // Ïåðåñå÷åíèå
{
if(AO(1) > 0 &&
AO(2) < 0)
return(true); else return(false);
}
bool AOBuy2() // Áëþäöå
{
if(AO(1) > AO(2) &&
AO(2) < AO(3) &&
AO(2) > 0)
return(true); else return(false);
}
// --- Sell
bool AOSell1() // Ïåðåñå÷åíèå
{
if(AO(1) < 0 &&
AO(2) > 0)
return(true); else return(false);
}
bool AOSell2() // Áëþäöå
{
if(AO(1) < AO(2) &&
AO(2) > AO(3) &&
AO(2) < 0)
return(true); else return(false);
}
// --- --- --- Ìîäåëü äâå âåðøèíû AO! Bull - 1; Bear - 2; N/A - 0
int AOModel(int Shift = 0)
{
int a = 0;
if(AO(Shift + 1) > 0 && Peak < 0)
{Peak = 0; TimePeak = 0; PrePeak = 0; PreTimePeak = 0;}
if(AO(Shift + 1) < 0 && Peak > 0)
{Peak = 0; TimePeak = 0; PrePeak = 0; PreTimePeak = 0;}
/*if(Peak < 0 && // --- Bull
(AO(Shift + 1) > AO(Shift + 2) &&
AO(Shift + 2) < AO(Shift + 3) &&
AO(Shift + 1) < 0 &&
AO(Shift + 3) < 0) &&
AO(Shift + 2) > Peak)
a = 1; else a = 3;
if(Peak > 0 && // --- Bear
(AO(Shift + 1) < AO(Shift + 2) &&
AO(Shift + 2) > AO(Shift + 3) &&
AO(Shift + 1) > 0 &&
AO(Shift + 3) > 0) &&
AO(Shift + 2) < Peak)
a = 2; else {if(a != 1) a = 3;}*/
if((AO(Shift + 1) > AO(Shift + 2) && // --- Âåðøèíà ìåíüøå íóëÿ
AO(Shift + 2) < AO(Shift + 3) &&
AO(Shift + 1) < 0 &&
AO(Shift + 3) < 0/* &&
AO(Shift + 2) < Peak*/) ||
(AO(Shift + 1) < AO(Shift + 2) && // --- Âåðøèíà áîëüøå íóëÿ
AO(Shift + 2) > AO(Shift + 3) &&
AO(Shift + 1) > 0 &&
AO(Shift + 3) > 0/* &&
AO(Shift + 2) > Peak*/) &&
TimePeak != Time[Shift + 2])
{
PrePeak = Peak;
PreTimePeak = TimePeak;
Peak = AO(Shift + 2);
TimePeak = Time[Shift + 2];
if(Peak < 0 && PrePeak < 0 && Peak > PrePeak)
a = 1; else a = 3;
if(Peak > 0 && PrePeak > 0 && Peak < PrePeak)
a = 2; else {if(a != 1) a = 3;}
}else a = 3;
//if(a != 3) Print(a);
if(a == 1) return(1);
if(a == 2) return(2);
if(a == 3) return(0);
}
// Ôèëüòð Àëëèãàòîð!
// Ìèíèìàëüíîå çíà÷åíèå
double AlligatorMin(int Shift = 1)
{
double Min;
Min = MathMin(iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, Shift),
iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, Shift));
Min = MathMin(Min,
iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift));
Min = NormalizeDouble(Min, Digits);
return(Min);
}
// Ìàêñèìàëüíîå çíà÷åíèå
double AlligatorMax(int Shift = 1)
{
double Max;
Max = MathMax(iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, Shift),
iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, Shift));
Max = MathMax(Max,
iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift));
Max = NormalizeDouble(Max, Digits);
return(Max);
}
// Êðàñíàÿ ëèíèÿ àëëèãàòîðà
double AlligatorRed(int Shift = 1)
{
double _Red = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift);
return(NormalizeDouble(_Red, Digits));
}
// Ôðàêòàë
void Fractal(int Shift = 0)
{
if(iFractals(NULL, 0, MODE_UPPER, Shift + 3) > 0 &&
(
(iFractals(NULL, 0, MODE_UPPER, Shift + 3) > AlligatorMax(Shift + 3) && AlligatorMode == 1) ||
(iFractals(NULL, 0, MODE_UPPER, Shift + 3) > AlligatorRed(Shift + 3) && AlligatorMode == 2))
)
{
FractalUpper = iFractals(NULL, 0, MODE_UPPER, Shift + 3);
Time1 = Time[Shift + 3];
Print("Íàéäåí ôðàêòàë ââåðõ, çíà÷åíèå: ", DoubleToStr(FractalUpper, Digits));
}
if(iFractals(NULL, 0, MODE_LOWER, Shift + 3) > 0 &&
(
(iFractals(NULL, 0, MODE_LOWER, Shift + 3) < AlligatorMin(Shift + 3) && AlligatorMode == 1) ||
(iFractals(NULL, 0, MODE_LOWER, Shift + 3) < AlligatorRed(Shift + 3) && AlligatorMode == 2))
)
{
FractalLower = iFractals(NULL, 0, MODE_LOWER, Shift + 3);
Time2 = Time[Shift + 3];
Print("Íàéäåí ôðàêòàë âíèç, çíà÷åíèå: ", DoubleToStr(FractalLower, Digits));
}
}
// 5 áàðîâ îäíîãî öâåòà
void FiveBars(int Shift = 0)
{
int NumBarsGreen = 0, NumBarsRed = 0;
for(int a = 1; a <= 5; a++)
{
if(AO(Shift + a) > AO(Shift + a + 1) &&
AC(Shift + a) > AC(Shift + a + 1))
NumBarsGreen++;
if(AO(Shift + a) < AO(Shift + a + 1) &&
AC(Shift + a) < AC(Shift + a + 1))
NumBarsRed++;
}
if(NumBarsGreen == 5 &&
Low[Shift + 1] > AlligatorMax(Shift + 1))
{BarsGreen = true; BarsRed = false; PriceZone = Low[Shift + 1];}
if(NumBarsRed == 5 &&
High[Shift + 1] < AlligatorMin(Shift + 1))
{BarsRed = true; BarsGreen = false; PriceZone = High[Shift + 1];}
// ---
if(BarsGreen == true && PriceZone < Low[Shift + 1]) PriceZone = Low[Shift + 1];
if(BarsRed == true && PriceZone > High[Shift + 1]) PriceZone = High[Shift + 1];
}
// Çàêðûòèå âñåõ îòêðûòûõ ïîçèöèé
void CloseAll()
{
int Orders;
Orders = OrdersTotal();
for(int a = Orders; a > 0; a--)
{
if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
{
int OrdTicket = OrderTicket();
double OrdLots = OrderLots();
if(OrderType() == OP_BUY)
OrderClose(OrdTicket, OrdLots, Bid, 3, Orange);
else
OrderClose(OrdTicket, OrdLots, Ask, 3, Orange);
}
}
}
// Çíà÷åíèå èíäèêàòîðà AO!
double AO(int Shift)
{
return(NormalizeDouble(iAO(NULL, 0, Shift), Digits + 1));
}
// Çíà÷åíèå èíäèêàòîðà AC!
double AC(int Shift)
{
return(NormalizeDouble(iAC(NULL, 0, Shift), Digits + 2));
}
// Îòêðûòèå - Buy()
void Buy()
{
if(Reinvest)
Lot = NormalizeDouble((AccountFreeMargin()*Lots)/(UnitLot*Ask), 1); else Lot = Lots;
if(Lot >= MaxLots) Lot = MaxLots;
if(StopLoss != 0)
SL = Bid - StopLoss*Point; else SL = 0;
if(TakeProfit != 0)
TP = Bid + TakeProfit*Point; else TP = 0;
//---
if(AccountFreeMargin() - Lot*UnitLot*Ask > 0)
Ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, SL, TP, "", 0, 0, Red);
}
// Îòêðûòèå - Sell()
void Sell()
{
if(Reinvest)
Lot = NormalizeDouble((AccountFreeMargin()*Lots)/(UnitLot*Bid), 1); else Lot = Lots;
if(Lot >= MaxLots) Lot = MaxLots;
if(StopLoss != 0)
SL = Ask + StopLoss*Point; else SL = 0;
if(TakeProfit != 0)
TP = Ask - TakeProfit*Point; else TP = 0;
//---
if(AccountFreeMargin() - Lot*UnitLot*Bid > 0)
Ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, SL, TP, "", 0, 0, Blue);
}
// Òèï îòêðûòîé ïîçèöèè (åñëè îíà åñòü)
int _OrderType()
{
if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType() == OP_BUY) return(0);
if(OrderType() == OP_SELL) return(1);
}
}
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
---