Что-то тема совсем завяла.
Тестил на следующих парах USDCHF, USDJPY, EURJPY, GBPJPY
Таймфрейм 1минута, настройки без изменений.
С парами EURUSD и GBPUSD упорно сливает…
Две недели тестирования.
if(iOpen(Symbol(),0,0)<=TP) return;
if(iOpen(Symbol(),0,0)>=TP) return;
//+------------------------------------------------------------------+
//| GAP.mq4 |
//| Lapot' |
//| goja2008@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Lapot'"
#property link "goja2008@yandex.ru"
#property version "1.00"
extern double LOT =1; // размер торгуемого лота
extern int step = 3;
extern int MagicNumber =66778;// Магик ордеров советника
int rast,popolam,stop,ticet;double TP,SL;
datetime time;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Modify();
if(time==Time[0]) return;
else time=Time[0];
Comment("");
int g = GAP();
if(Count_Buy()==0 && Count_Sell()==0)
{
if(GAP()==1)
{
TP=NormalizeDouble((iHigh(Symbol(),0,2)+step*Point),Digits);
rast=NormalizeDouble((iOpen(Symbol(),0,0)-TP*Point),Digits);
popolam=rast/2;
rast=rast+popolam;
stop=rast*0.5;
SL=NormalizeDouble((iOpen(Symbol(),0,0)+stop*Point),Digits);
Comment("тейкпрофит="+TP," стоплос="+SL," растояние="+rast);
ticet=OrderSend(Symbol(),OP_SELL,LOT,Bid,5,0,0,"GAP_Sell",MagicNumber,0,Red);
/* if (OrderSelect(ticet,SELECT_BY_TICKET,MODE_TRADES ))
{
if(OrderModify(ticet,OrderOpenPrice(),SL,TP,0,0)) Print("ордер изменен");
}*/
}
if(GAP()==2)
{
TP=NormalizeDouble((iLow(Symbol(),0,2)-step*Point),Digits);
rast=NormalizeDouble(TP-(iOpen(Symbol(),0,0))*Point,Digits);
popolam=rast/2;
rast=rast+popolam;
stop=rast*0.5;
SL=NormalizeDouble((iOpen(Symbol(),0,0)-stop*Point),Digits);
Comment("тейкпрофит="+TP," стоплос="+SL);
ticet=OrderSend(Symbol(),OP_BUY,LOT,Ask,5,0,0,"GAP_Byu",MagicNumber,0,Blue);
/* if (OrderSelect(ticet,SELECT_BY_TICKET,MODE_TRADES ))
{
if(OrderModify(ticet,OrderOpenPrice(),SL,TP,0,0)) Print("ордер изменен");
}*/
}
}
}
//+------------------------------------------------------------------+
//+---------------------- GAP -------------------------------------------------------+
int GAP()
{
int gap=0;// переменная в которую запишем значение ГЭПа ; 1- разрыв цены вверх;
//2- разрыв цены вниз
//0- ГЭП не подтвержден
int shag; // запишем сюда разрыв цены в пунктах между ценой открытия
// текущей свечи и ценой закрытия пред идущей свечи
// прроверяем разрыв вверх
if(iOpen(Symbol(),0,1)>iClose(Symbol(),0,2))
{
// вычисляем и записываем переменную shag
shag=NormalizeDouble((iOpen(Symbol(),0,1)-iClose(Symbol(),0,2))/Point,Digits);
// Проверяем разрыв по правилу паттерна
if(shag>=20)gap=1;
}
// прверяем разрыв вниз
if(iOpen(Symbol(),0,1)<iClose(Symbol(),0,2))
{
// вычисляем и записываем переменную shag
shag=NormalizeDouble((iClose(Symbol(),0,2)-iOpen(Symbol(),0,1))/Point,Digits);
// Проверяем разрыв по правилу паттерна
if(shag>=20)gap=2;
}
return(gap);
}
//+-----------------Количество Byu ордеров------------------------------------------+
int Count_Buy()
{
int count =0;
int Total = OrdersTotal();
for(int i=0;i<Total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
{
if(OrderType()!=OP_SELL || OrderType()!=OP_SELLSTOP)
{
if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
count++;
}
}
}
}
return(count);
}
//+--------------------Количество Sell ордеров----------------------------------------------+
int Count_Sell()
{
int count =0;
int Total = OrdersTotal();
for(int i=0;i<Total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
{
if (OrderType()!=OP_BUY || OrderType()!=OP_BUYSTOP)
{
if (OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
count++;
}
}
}
}
return(count);
}
//+--------------------------Модификация ордеров------------------------------------------------+
void Modify()
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (OrderType()==OP_BUY)
{
if(OrderModify(ticet,OrderOpenPrice(),SL,TP,0,0)) Print("ордер изменен");
}
if (OrderType()==OP_SELL)
{
if(OrderModify(ticet,OrderOpenPrice(),SL,TP,0,0)) Print("ордер изменен");
}
}
}
}
}
//+---------------------- GAP -------------------------------------------------------+
int GAP()
{
int gap=0;// переменная в которую запишем значение ГЭПа ; 1- разрыв цены вверх;
//2- разрыв цены вниз
//0- ГЭП не подтвержден
int shag; // запишем сюда разрыв цены в пунктах между ценой открытия
// текущей свечи и ценой закрытия пред идущей свечи
// прроверяем разрыв вверх
if(iOpen(Symbol(),0,0)>iClose(Symbol(),0,1))
{
// вычисляем и записываем переменную shag
shag=NormalizeDouble((iOpen(Symbol(),0,0)-iClose(Symbol(),0,1))/Point,Digits);
// Проверяем разрыв по правилу паттерна
if(shag>=20)gap=1;
}
// прверяем разрыв вниз
if(iOpen(Symbol(),0,0)<iClose(Symbol(),0,1))
{
// вычисляем и записываем переменную shag
shag=NormalizeDouble((iClose(Symbol(),0,1)-iOpen(Symbol(),0,0))/Point,Digits);
// Проверяем разрыв по правилу паттерна
if(shag>=20)gap=2;
}
return(gap);
}
<code> //+-----------Модель поглащения---------------------------------------------+ int Poglashenie() { int Pogl=0;/* Переменная в которую будем записывать тип модели поглащения присвоим 1 если паттерн бычий, присвоим 2 если паттерн медвежий. вернем 0 если паттерн не состоялся.*/ // Проверим направление материнской свечи int mat_buch=0; // Бычая свеча int mat_med=0; // Медвежья свеча if (iOpen(Symbol(),0,2)>iClose(Symbol(),0,2)) mat_med++; if (iOpen(Symbol(),0,2)<iClose(Symbol(),0,2)) mat_buch++; // Проверяем направление сигнальной свечи int in_buch=0; // Бычий бар int in_med =0; // Медвежий бар if (iOpen(Symbol(),0,1)>iClose(Symbol(),0,1)) in_med++; if (iOpen(Symbol(),0,1)<iClose(Symbol(),0,1)) in_buch++; // Бычий сетап : Материнская свеча - меньше сигнальной, сигнальная свеча - бычья if(in_buch>0) { /* Проверяем ценовой диапозон материнской свечи, чтоб он не выходил за ценовой диапазон сигнальной свечи и присваеваем переменной Pogl значение 1*/ if(iHigh(Symbol(),0,2)<iHigh(Symbol(),0,1) && iLow(Symbol(),0,2)>iLow(Symbol(),0,1))Pogl=1; } // Медвежий сетап : Материнская свеча - меньше сигнальной, сигнальная свеча - Медвежья if(in_med>0) { /* проверим ценовой дипазон материнской свечи, что б он не выходил за ценовой диапазон сигнальной свечи и присвоим переменной Pogl значение 2*/ if(iHigh(Symbol(),0,2)<iHigh(Symbol(),0,1) && iLow(Symbol(),0,2)>iLow(Symbol(),0,1))Pogl=2; } return(Pogl); } </code>
//+------------------------------------------------------------------+
//| Price_Action_Poglascenie.mq4 |
//| Lapot' |
//| goja2008@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Lapot'"
#property link "goja2008@yandex.ru"
#property version "1.00"
//#include "Price Action.mq4" // Добовление функций из личной библиотеки
//--- input parameters
extern double LOT =0.01; // Размер лота
extern int Step =5; // шаг отступа от экстремума для отложки и стоплоса
extern int MagicNumber = 567888; // Магик
double pb/*цена в бай*/,ps/*цена в сел*/, tp,sl,svecha,ticet;
datetime time;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
if(Digits==5 || Digits==3) Step *=10; // увеличиваем шаг на 5-ти знаке
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (time==Time[0]) return;
else time=Time[0];
if(Poglashenie()>0)DeleteOrder(MagicNumber);
{
if(Count_Buy()==0 && Count_Sell()==0)// Проверка рыночных ордеров
{
if(Poglashenie()==1) // Проверка Бычьего сетапа полащения
{
pb=PriceBuy(Step); // Определяем цену отложного ордера
//Ставим Стоповый Бай
ticet=OrderSend(Symbol(),OP_BUYSTOP,LOT,pb,5,0,0,"поглащение Быки",MagicNumber,0);// Print("OK");
if (OrderSelect(ticet,SELECT_BY_TICKET,MODE_TRADES ))
{
// Получаем цену для стоплоса
sl=NormalizeDouble(iLow(Symbol(),0,1)-Step*Point,Digits);
// считаем профит
svecha=NormalizeDouble((iHigh(Symbol(),0,1)-sl)/Point,Digits);// размер от хая сигнальной
// свечи до стоплоса в пунктах
tp= NormalizeDouble(pb+svecha*Point,Digits);
// Ставим ордеру Стоп и профит
if(OrderModify(ticet,OrderOpenPrice(),sl,tp,0)) Print("ордер изменен");
}
}
if(Poglashenie()==2) // Проверка Медвежьего сетапа полащения
{
ps=PriceSell(Step); // Определяем цену отложного ордера
//Ставим Стоповый Сел
ticet=OrderSend(Symbol(),OP_SELLSTOP,LOT,ps,5,0,0,"поглащение Медведи",MagicNumber,0);// Print("OK");
if (OrderSelect(ticet,SELECT_BY_TICKET,MODE_TRADES ))
{
// Получаем цену для стоплоса
sl=NormalizeDouble(iHigh(Symbol(),0,1)+Step*Point,Digits);
// считаем профит
svecha=NormalizeDouble((sl-iLow(Symbol(),0,1))/Point,Digits);// размер от стоплоса до
//до лоя сигнальной свечи в пунктах
tp= NormalizeDouble(OrderOpenPrice()-svecha*Point,Digits);
// Ставим орднру Стоп и профит
if(OrderModify(ticet,OrderOpenPrice(),sl,tp,0)) Print("ордер изменен");
}
}
}
}
}
//+------------------------------------------------------------------+
void DeleteOrder(int Mag)
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (Symbol()==OrderSymbol() && OrderMagicNumber()==Mag)
{
if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
if(OrderDelete(OrderTicket())) Print("Delete");
}
}
}
}
//+------------------------------------------------------------------+
int Count_Buy()
{
int count =0;
int Total = OrdersTotal();
for(int i=0;i<Total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
{
if(OrderType()!=OP_SELL || OrderType()!=OP_SELLSTOP)
{
if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
count++;
}
}
}
}
return(count);
}
//+--------------------Количество Sell ордеров----------------------------------------------+
int Count_Sell()
{
int count =0;
int Total = OrdersTotal();
for(int i=0;i<Total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
{
if (OrderType()!=OP_BUY || OrderType()!=OP_BUYSTOP)
{
if (OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
count++;
}
}
}
}
return(count);
}
double PriceBuy(int Otstup)
{
double price = NormalizeDouble(High[1]+Otstup*Point,Digits);
return(price);
}
//+------------------------------------------------------------------+
double PriceSell(int Otstup)
{
double price = NormalizeDouble(Low[1]-Otstup*Point,Digits);
return(price);
}
int Poglashenie()
{
int Pogl=0;/* Переменная в которую будем записывать тип модели поглащения
присвоим 1 если паттерн бычий, присвоим 2 если паттерн медвежий.
вернем 0 если паттерн не состоялся.*/
// Проверим направление материнской свечи
int mat_buch=0; // Бычая свеча
int mat_med=0; // Медвежья свеча
if (iOpen(Symbol(),0,2)>iClose(Symbol(),0,2)) mat_med++;
if (iOpen(Symbol(),0,2)<iClose(Symbol(),0,2)) mat_buch++;
// Проверяем направление сигнальной свечи
int in_buch=0; // Бычий бар
int in_med =0; // Медвежий бар
if (iOpen(Symbol(),0,1)>iClose(Symbol(),0,1)) in_med++;
if (iOpen(Symbol(),0,1)<iClose(Symbol(),0,1)) in_buch++;
// Бычий сетап : Материнская свеча - меньше сигнальной, сигнальная свеча - бычья
if(in_buch>0)
{
/* Проверяем ценовой диапозон материнской свечи, чтоб он не выходил
за ценовой диапазон сигнальной свечи и присваеваем переменной
Pogl значение 1*/
if(iHigh(Symbol(),0,2)<iHigh(Symbol(),0,1) && iLow(Symbol(),0,2)>iLow(Symbol(),0,1))Pogl=1;
}
// Медвежий сетап : Материнская свеча - меньше сигнальной, сигнальная свеча - Медвежья
if(in_med>0)
{
/* проверим ценовой дипазон материнской свечи, что б он не выходил за ценовой диапазон
сигнальной свечи и присвоим переменной Pogl значение 2*/
if(iHigh(Symbol(),0,2)<iHigh(Symbol(),0,1) && iLow(Symbol(),0,2)>iLow(Symbol(),0,1))Pogl=2;
}
return(Pogl);
}
<code>//+---------------------Внутрений бар------------------------------------+ int Inside_Bar() { int In_bar=0; // Переменная в которую будем записывать тип внутреннего бара // присвоим 1 если паттерн бычий, присвоим 2 если паттерн медвежий. // вернем 0 если паттерн не состоялся. // Проверим направление материнской свечи int mat_buch=0; // Бычая свеча int mat_med=0; // Медвежья свеча if (iOpen(Symbol(),0,2)>iClose(Symbol(),0,2)) mat_med++; if (iOpen(Symbol(),0,2)<iClose(Symbol(),0,2)) mat_buch++; // Проверяем направление внутреннего бара int in_buch=0; // Бычий бар int in_med =0; // Медвежий бар if (iOpen(Symbol(),0,1)>iClose(Symbol(),0,1)) in_med++; if (iOpen(Symbol(),0,1)<iClose(Symbol(),0,1)) in_buch++; // Бычий сетап : Материнская свеча - медвежья, внутренний бар - бычий if(mat_med>0 && in_buch>0) { // проверим ценовой дипазон внутреннего бара, что б он не выходил за ценовой диапазон // материнской свечи и присвоим переменной In_bar значение 1 if(iHigh(Symbol(),0,1)<=iHigh(Symbol(),0,2) && iLow(Symbol(),0,1)>=iLow(Symbol(),0,2))In_bar=1; } // Медвежий сетап : Материнская свеча - Бычья, внутренний бар - Медвежий if(mat_buch>0 && in_med>0) { // проверим ценовой дипазон внутреннего бара, что б он не выходил за ценовой диапазон // материнской свечи и присвоим переменной In_bar значение 2 if(iHigh(Symbol(),0,1)<=iHigh(Symbol(),0,2) && iLow(Symbol(),0,1)>=iLow(Symbol(),0,2))In_bar=2; } return(In_bar); }</code>
Думаю, если без особого фанатизма торговать по правилам — можно стать олигархом
levs01