//+------------------------------------------------------------------+
//| BuySell3.mq5 |
//| Copyright 2021, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#include <Trade\Trade.mqh> // Подключаем торговый класс CTrade
//--- Inputs
input double Lots = 0.1; // лот
input double KTake = 6; // увеличение тейка
input int BULevel = 200; // уровень БУ
input int BUPoint = 20; // пункты БУ
input int Slip = 30; // реквот
input int Magic = 123; // магик
input bool RayRight = 1; // продолжение линии вправо
input int Width = 1; // толщина линий
input color UpColor = Red; // цвет верхней линий
input color DnColor = Blue; // цвет нижней линий
CTrade trade; // Используем торговый класс CTrade
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
PutTrendLine("UP",iTime(NULL,0,111),Bid+222*_Point,iTime(NULL,0,0),Bid+222*_Point,UpColor);
PutTrendLine("DN",iTime(NULL,0,111),Bid-222*_Point,iTime(NULL,0,0),Bid-222*_Point,DnColor);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
ObjectDelete(0,"up");
ObjectDelete(0,"dn");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
{
ObjectDelete(0,name);
ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,RayRight);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,1);
ObjectSetInteger(0,name,OBJPROP_SELECTED,1);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void BU()
{
// Лучшее предложение на покупку
double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
// Лучшее предложение на продажу
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double sl=0,tp=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelect(_Symbol))
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
if(PositionGetDouble(POSITION_PRICE_OPEN)<=Bid-BULevel*_Point)
{
if(PositionGetDouble(POSITION_PRICE_OPEN)>PositionGetDouble(POSITION_SL))
{
sl = PositionGetDouble(POSITION_PRICE_OPEN)+BUPoint*_Point;
tp = PositionGetDouble(POSITION_TP);
trade.PositionModify(_Symbol,sl,tp);
}
}
}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
if(PositionGetDouble(POSITION_PRICE_OPEN)>=Ask+BULevel*_Point)
{
if(PositionGetDouble(POSITION_SL)>PositionGetDouble(POSITION_PRICE_OPEN))
{
sl = PositionGetDouble(POSITION_PRICE_OPEN)-BUPoint*_Point;
tp = PositionGetDouble(POSITION_TP);
trade.PositionModify(_Symbol,sl,tp);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double pr=0,sl=0,tp=0;
double lo=iLow(NULL,0,0);
double hi=iHigh(NULL,0,0);
double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
double up=ObjectGetValueByTime(0,"UP",iTime(NULL,0,0));
double dn=ObjectGetValueByTime(0,"DN",iTime(NULL,0,0));
if(BULevel>0)
BU();
if(PositionsTotal()<1)
{
if(Bid>up && lo<up)
{
pr=NormalizeDouble(Ask,_Digits);
sl=NormalizeDouble(lo,_Digits);
tp=NormalizeDouble(Bid+KTake*(up-lo),_Digits);
trade.Buy(Lots,NULL,pr,sl,tp,"");
}
if(Bid<dn && hi>dn)
{
pr=NormalizeDouble(Bid,_Digits);
sl=NormalizeDouble(hi,_Digits);
tp=NormalizeDouble(Bid-KTake*(hi-dn),_Digits);
trade.Sell(Lots,NULL,Bid,sl,tp,"");
}
}
Comment("\n up: ",up,
"\n dn: ",dn);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
ну как нибудь снова обращусь, но у же с новым индикатором а тз такое же
ТЗ
индикатор Essam рисует черточки в подвале,
как только появляется черточка, то на следующих двух барах и нарисовать черточки противоположной полярности.
затем на следующих 4 барах в противоположной полярности нарисовать черточки потом 8 16 32 и так далее до тех пор пока индикатор Essam не нарисует новую черточку — тогда все начинается сначала.
к полученной зебре применить фильтр по направлению свечи, т.е., если черточка нарисована сверху и совпадает с растущим баром то черточку оставить, в противном случае стереть.
потом, если принять что каждая черточка равна единице — нарисовать скользящую среднюю этого графика.
Андрей, тумблер для зиг зага поставьте, пжл.
if(Renko)
{
buy=yel>red;
sell=yel<red;
}
if(Tri)
{
buy=tblu!=EMPTY_VALUE;
sell=tred!=EMPTY_VALUE;
}
if(Renko && Tri)
{
buy=yel>red && tblu!=EMPTY_VALUE;
sell=yel<red && tred!=EMPTY_VALUE;
}
Второй вопрос: поиск сигнала на №… кол-во свечей. Это какая строка?
AM2