input int StartSig = 1; // начало сигнала
input int EndSig = 5; // конец сигнала
input int Barov = 30; // баров от 1-го сигнала
//+------------------------------------------------------------------+
//| OutSide.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
input double Lots = 0.1; // лот
input double KLot = 2; // увеличение лота
input double MaxLot = 5; // максимальный лот
input int StopLoss = 0; // стоплосс
input int TakeProfit = 30; // тейкпрофит
input int Delta = 30; // расстояние от цены
input int Exp = 20; // экспирация
input int Slip = 100; // проскальзывание
CTrade trade; // Используем торговый класс CTrade
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Lot()
{
double lot=Lots;
if(HistorySelect(0,TimeCurrent()))
{
double profit=HistoryDealGetDouble(HistoryDealGetTicket(HistoryDealsTotal()-1),DEAL_PROFIT);
double LastLot=HistoryDealGetDouble(HistoryDealGetTicket(HistoryDealsTotal()-1),DEAL_VOLUME);
if(profit>0)
lot=Lots;
if(profit<0)
lot=LastLot*KLot;
}
if(lot>MaxLot)
lot=Lots;
return(lot);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double sl=0,tp=0,pr=0;
double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
bool buy=iLow(NULL,0,1)<iLow(NULL,0,2) && iHigh(NULL,0,1)>iHigh(NULL,0,2) && iClose(NULL,0,1)>iOpen(NULL,0,2) && iClose(NULL,0,1)>iOpen(NULL,0,2) && iClose(NULL,0,2)<iOpen(NULL,0,2);
bool sell=iLow(NULL,0,1)<iLow(NULL,0,2) && iHigh(NULL,0,1)>iHigh(NULL,0,2) && iClose(NULL,0,1)<iOpen(NULL,0,2) && iClose(NULL,0,1)<iOpen(NULL,0,2) && iClose(NULL,0,2)>iOpen(NULL,0,2);
if(PositionsTotal()<1 && OrdersTotal()<1)
{
if(buy)
{
pr=NormalizeDouble(iHigh(NULL,0,1)+Delta*_Point,_Digits);
if(StopLoss>0)
sl=NormalizeDouble(pr-StopLoss*_Point,_Digits);
else
sl=NormalizeDouble(iLow(NULL,0,1),_Digits);
if(TakeProfit>0)
tp=NormalizeDouble(pr+TakeProfit*_Point,_Digits);
trade.BuyStop(Lot(),pr,NULL,sl,tp,2,TimeCurrent()+Exp*3600,NULL);
}
if(sell)
{
pr=NormalizeDouble(iLow(NULL,0,1)-Delta*_Point,_Digits);
if(StopLoss>0)
sl=NormalizeDouble(pr+StopLoss*_Point,_Digits);
else
sl=NormalizeDouble(iHigh(NULL,0,1),_Digits);
if(TakeProfit>0)
tp=NormalizeDouble(pr-TakeProfit*_Point,_Digits);
trade.SellStop(Lot(),pr,NULL,sl,tp,2,TimeCurrent()+Exp*3600,NULL);
}
}
Comment("\n ");
}
//+------------------------------------------------------------------+
AM2