Sadukey_exp

Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
82.00 %
Total Trades 14
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -1.02
Gross Profit 65.70
Gross Loss -80.00
Total Net Profit -14.30
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
29.00 %
Total Trades 13
Won Trades 5
Lost trades 8
Win Rate 0.38 %
Expected payoff -8.75
Gross Profit 46.20
Gross Loss -160.00
Total Net Profit -113.80
-100%
-50%
0%
50%
100%
Sadukey_exp
//+------------------------------------------------------------------+
//|                                                  Sadukey_exp.mq4 |
//+------------------------------------------------------------------+

#property  copyright "Copyright © 2009, "
#property link      ""

#include <stdlib.mqh>

extern int TakeProfit = 300;
extern int StopLoss = 200;
extern int TrailingStop = 120;
extern int TrailingStep = 20;
extern bool CloseOppositePosition = false;

extern double Lots = 0.1;      // ëîò
extern int Slippage = 1;

extern string s______ = "Ïàðàìåòðû èíäèêàòîðà Stoch";
extern int       KPeriod     =  30;
extern int       Slowing     =  10;
extern int       DPeriod     =  10;
extern string note4 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int       MAMethod    =   0;
extern string note5 = "0=high/low, 1=close/close";
extern int       PriceField  =   1;
extern string note6 = "overbought level";
extern int       overBought  =  60;
extern string note7 = "oversold level";
extern int       overSold    =  40;


#define Buy 0
#define Sell 1
#define Unknown 2

#define Up 0
#define Dn 1

double spread;

int BuyMagic = 5124000;
int SellMagic = 51250000;

bool CanOpenBuy = true;
bool CanOpenSell = true;

int prevBars = -1;

int init()
{
	spread = Ask - Bid;

	CanOpenBuy = true;
	CanOpenSell = true;

	BuyMagic = 5124000;
	SellMagic = 5125000;

	prevBars = -1;
	
	RunIndicator();
	
	return(0);
}

int start()
{
	DoTrail();
	int curBars = iBars(Symbol(), Period());
	if (prevBars == -1)
	{
		prevBars = curBars;
	}
	if (curBars == prevBars)
	{
		return;
	}
	// ïîÿâèëñÿ íîâûé áàð
	prevBars = curBars;
	
	double Stoch = iCustom(Symbol(), 0, "Color Stochastic", "", KPeriod, Slowing, DPeriod, "", MAMethod, "", PriceField, "", overBought, "", overSold, 1, 1);
	
	double Filter1 = iCustom(Symbol(), 0, "Figure", 0, 1);
	double Filter2 = iCustom(Symbol(), 0, "Figure", 2, 1);
	double Filter3 = iCustom(Symbol(), 0, "Figure", 3, 1);
	
	int Direction;
	
	if(Filter1 > Filter3 && Filter2 > Filter3)
	{
		CanOpenSell = true;
		if(Filter1 > Filter2 && Filter2 > Filter3)
		{
			Direction = Up;
		}
		else
		{
			Direction = Unknown;
		}
	}
	else if(Filter1 < Filter3 && Filter2 < Filter3)
	{
		CanOpenBuy = true;
		if(Filter1 < Filter2 && Filter2 < Filter3)
		{
			Direction = Dn;
		}
		else
		{
			Direction = Unknown;
		}
	}
	else
	{
		Direction = Unknown;
	}

	if(CanOpenBuy && Stoch >= overBought && Direction == Up)
	{
		if(CloseOppositePosition)
		{
			CloseAllSell();
		}
		CanOpenBuy = false;
		OpenBuy();
	}

	if(CanOpenSell && Stoch <= overSold && Direction == Dn)
	{
		if(CloseOppositePosition)
		{
			CloseAllBuy();
		}
		CanOpenSell = false;
		OpenSell();
	}

	return(0);
}

// ôóíêöèÿ ïðîãîíÿåò èíäèêàòîð íà èñòîðèè äî òåêóùåãî ìîìåíòà äëÿ òîãî, ÷òîá óñòàíîâèòü òåêóùåå íàïðàâëåíèå èíäèêàòîðà è 
// óñòàíîâèòü ïðàâèëüíûå çíà÷åíèÿ ïåðåìåííûõ, îòâå÷àþùèõ çà òîðãîâëþ
void RunIndicator()
{
	int i;
	
	for(i = 100; i >= 1; i--)
	{
		double Stoch = iCustom(Symbol(), 0, "Color Stochastic", "", KPeriod, Slowing, DPeriod, "", MAMethod, "", PriceField, "", overBought, "", overSold, 1, i);
	
		double Filter1 = iCustom(Symbol(), 0, "Figure", 0, i);
		double Filter2 = iCustom(Symbol(), 0, "Figure", 2, i);
		double Filter3 = iCustom(Symbol(), 0, "Figure", 3, i);
	
		int Direction;
	
		if(Filter1 > Filter3 && Filter2 > Filter3)
		{
			CanOpenSell = true;
			if(Filter1 > Filter2 && Filter2 > Filter3)
			{
				Direction = Up;
			}
			else
			{
				Direction = Unknown;
			}
		}
		else if(Filter1 < Filter3 && Filter2 < Filter3)
		{
			CanOpenBuy = true;
			if(Filter1 < Filter2 && Filter2 < Filter3)
			{
				Direction = Dn;
			}
			else
			{
				Direction = Unknown;
			}
		}
		else
		{
			Direction = Unknown;
		}

		if(CanOpenBuy && Stoch >= overBought && Direction == Up)
		{
			CanOpenBuy = false;
		}

		if(CanOpenSell && Stoch <= overSold && Direction == Dn)
		{
			CanOpenSell = false;
		}
	}
}

void OpenBuy()
{
	int i;		
	int Orders = OrdersTotal();
	double BuyOpen;
	double BuyTP = 0;
	double BuySL = 0;
	
	RefreshRates();
	BuyOpen  = Ask;
	if(TakeProfit != 0)
		BuyTP = BuyOpen + TakeProfit*Point;
	
	if(StopLoss != 0)
	{
		BuySL = BuyOpen - StopLoss*Point;
	}

	//----------------------------------
	datetime begin = TimeCurrent();
	int ticket = OrderSend(Symbol(), OP_BUY, Lots, BuyOpen, Slippage, BuySL, BuyTP, "", BuyMagic, 0, Blue);
	
	int error;
	if (ticket==-1)
	{
		while(ticket == -1 && TimeCurrent() - begin < 20)
		{
			error = GetLastError();
			Print("Îøèáêà îòêðûòèÿ îðäåðà BUY. " + ErrorDescription(error));
			Sleep(100);
			Print("Ïîâòîð");
			RefreshRates();

			BuyOpen  = Ask;
			if(TakeProfit != 0)
				BuyTP = BuyOpen + TakeProfit*Point;
			if(StopLoss != 0)
			{
				BuySL = BuyOpen - StopLoss*Point;
			}
		    ticket = OrderSend(Symbol(), OP_BUY, Lots, BuyOpen, Slippage, BuySL, BuyTP, "", BuyMagic, 0, Blue);
		}
		if(ticket == -1)
		{
			error = GetLastError();
			Print("Îøèáêà îòêðûòèÿ îðäåðà BUY. " + ErrorDescription(error));
		}
	}
	
	if (ticket != -1)
	{
		Print("Îòêðûòî BUY íà " + Symbol() + " " + Period() + " îáúåìîì " + Lots + "!");
	}	
}

void OpenSell()
{
	int i;
	int Orders = OrdersTotal();
	double SellOpen;
	double SellTP = 0;
	double SellSL = 0;

	RefreshRates();
	
	SellOpen = Bid;
	if(TakeProfit != 0)
		SellTP = SellOpen - TakeProfit*Point;
	if(StopLoss != 0)
	{
		SellSL = SellOpen + StopLoss*Point;
	}
	
	datetime begin = TimeCurrent();
   int ticket = OrderSend(Symbol(), OP_SELL, Lots, SellOpen, Slippage, SellSL, SellTP, "", SellMagic, 0, Red);

	int error;
	if (ticket==-1)
	{
		//error=GetLastError();
		//Print("SELL error(",error,"): ",ErrorDescription(error));
		while(ticket == -1 && TimeCurrent() - begin < 20)
		{
			error = GetLastError();
			Print("Îøèáêà îòêðûòèÿ îðäåðà SELL. " + ErrorDescription(error));
			Sleep(100);
			Print("Ïîâòîð");
			RefreshRates();

			SellOpen = Bid;
			if(TakeProfit != 0)
				SellTP = SellOpen - TakeProfit*Point;
			if(StopLoss != 0)
			{
				SellSL = SellOpen + StopLoss*Point;
			}

		    ticket = OrderSend(Symbol(), OP_SELL, Lots, SellOpen, Slippage, SellSL, SellTP, "", SellMagic, 0, Red);
		}
		if(ticket == -1)
		{
			error = GetLastError();
			Print("Îøèáêà îòêðûòèÿ îðäåðà SELL. " + ErrorDescription(error));
		}
	}

    if (ticket != -1)
   	{
		Print("Îòêðûòî SELL íà " + Symbol() + " " + Period() + " îáúåìîì " + Lots + "!");
	}
}

void DoTrail()
{
	double TickSize = 0;
	if(Digits == 5)
	{
		TickSize = 0.00005;
	}
	else
	{
		TickSize = 0;
	}
	for (int i=0; i < OrdersTotal(); i++) 
	{
		OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

		if (OrderSymbol() == Symbol())
		{		  
			if(OrderType() == OP_BUY)
			{
				if(OrderMagicNumber() == BuyMagic)
				{
					double newstop = (Bid - MathMod(Bid, TickSize)) - (TrailingStop*Point - MathMod(TrailingStop*Point, TickSize));
					
					if(newstop > OrderOpenPrice() && (OrderOpenPrice() > OrderStopLoss() || OrderStopLoss() == 0))
					{
						if(!OrderModify(OrderTicket(), OrderOpenPrice(), newstop, OrderTakeProfit(), 0, Pink))
						{
							Print("Íå ïîëó÷èëîñü ìîäèôèöèðîâàòü îðäåð ¹" + OrderTicket() + ". Îøèáêà¹" + GetLastError());
						}
					}
					else if (OrderStopLoss() > OrderOpenPrice() && newstop - OrderStopLoss() >= TrailingStep*Point)
					{
						if(!OrderModify(OrderTicket(), OrderOpenPrice(), newstop, OrderTakeProfit(), 0, Pink))
						{
							Print("Íå ïîëó÷èëîñü ìîäèôèöèðîâàòü îðäåð ¹" + OrderTicket() + ". Îøèáêà¹" + GetLastError());
						}
					}
				}
			}
			else if (OrderType() == OP_SELL)
			{
				if(OrderMagicNumber() == SellMagic)
				{
					newstop = (Ask - MathMod(Ask, TickSize)) + (TrailingStop*Point - MathMod(TrailingStop*Point, TickSize));
					if(newstop < OrderOpenPrice() && (OrderStopLoss() > OrderOpenPrice() || OrderStopLoss() == 0))
					{
						if(!OrderModify(OrderTicket(), OrderOpenPrice(), newstop, OrderTakeProfit(), 0 ,Pink))
						{
							Print("Íå ïîëó÷èëîñü ìîäèôèöèðîâàòü îðäåð ¹" + OrderTicket() + ". Îøèáêà¹" + GetLastError());
						}
					}
					else if(OrderStopLoss() < OrderOpenPrice() && OrderStopLoss() - (newstop) >= TrailingStep*Point)
					{
						if(!OrderModify(OrderTicket(), OrderOpenPrice(), newstop, OrderTakeProfit(), 0 ,Pink))
						{
							Print("Íå ïîëó÷èëîñü ìîäèôèöèðîâàòü îðäåð ¹" + OrderTicket() + ". Îøèáêà¹" + GetLastError());
						}
					}
				}
			}
		}
	}
}

void CloseAllSell()
{
	int i;
	int orders = OrdersTotal();
	bool result;
	datetime begin;
	
	if(orders > 0)
	{
		for(i = orders-1; i >= 0; i--)
		{
			if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES) )
			{
				if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == SellMagic)
				{
					begin = TimeCurrent();
					result = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Yellow);			// çàêðûâàåì âñå âñòðå÷íûå îðäåðà
					while(!result && TimeCurrent() - begin <= 30 && !IsTesting())
					{
						Sleep(100);
						RefreshRates();
						result = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Yellow);			// çàêðûâàåì âñå âñòðå÷íûå îðäåðà
					}
					if(!result)
					{
						int error = GetLastError();
						Print("Îøèáêà çàêðûòèÿ îðäåðà SELL #" + OrderTicket() + " " + ErrorDescription(error));
					}
				}
			}
			else
			{
				Print("Íå óäàëîñü âûáðàòü îòêðûòûé îðäåð:" + ErrorDescription(error));
			}
		}
	}
}

void CloseAllBuy()
{
	int i;
	int Orders = OrdersTotal();
	bool result;
	datetime begin;
	
	if(Orders > 0)
	{
		for(i = Orders-1; i >= 0; i--)
		{
			if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES) )
			{
				if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == BuyMagic)
				{
					begin = TimeCurrent();
					result = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Yellow);			// çàêðûâàåì âñå âñòðå÷íûå îðäåðà
					while(!result && TimeCurrent() - begin <= 30 && !IsTesting())
					{
						Sleep(100);
						RefreshRates();
						result = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Yellow);			// çàêðûâàåì âñå âñòðå÷íûå îðäåðà
					}
					if(!result)
					{
						int error = GetLastError();
						Print("Îøèáêà çàêðûòèÿ îðäåðà BUY #" + OrderTicket() + " " + ErrorDescription(error));
					}
				}
			}
			else
			{
				Print("Íå óäàëîñü âûáðàòü îòêðûòûé îðäåð:" + ErrorDescription(error));
			}
		}
	}
}

int deinit()
{
	return(0);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---