Но, в настройках отсутствует возможность задать процент риска.
Впрочем, как и в индикаторе под МТ4.
вы просили переписать индикатор, я сделал. ни о каких изменениях в логике речи не было в тз.
Но, в настройках отсутствует возможность задать процент риска.
Впрочем, как и в индикаторе под МТ4.
//+------------------------------------------------------------------+
//| ProBoy.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 LT = 0.01; // лот
input double KL = 2; // увеличение лота
input double ML = 10; // максимальный лот
input double Coef = 3; //
input int Stop = 200; // стоплосс
input int Take = 300; // тейкпрофит
input int CloseOn = 1; // 1-закрытие в пятницу
input int CloseSig = 1; // 1-закрытие по сигналу
input int Slip = 100; // проскальзывание
input ulong Magic = 123; // магик
CTrade trade; // Используем торговый класс CTrade
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
trade.SetExpertMagicNumber(Magic);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Lot()
{
double lot=LT;
if(HistorySelect(0,TimeCurrent()))
{
double profit=HistoryDealGetDouble(HistoryDealGetTicket(HistoryDealsTotal()-1),DEAL_PROFIT);
double LastLot=HistoryDealGetDouble(HistoryDealGetTicket(HistoryDealsTotal()-1),DEAL_VOLUME);
if(profit>0)
lot=LT;
if(profit<0)
lot=LastLot*KL;
}
if(lot>ML)
lot=LT;
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll(int type=-1)
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetInteger(POSITION_MAGIC)==Magic)
{
if(PositionGetInteger(POSITION_TYPE)==type)
{
trade.PositionClose(PositionGetTicket(i));
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
MqlDateTime tm;
double sl=0,tp=0;
double cl1=iClose(NULL,0,1),op1=iOpen(NULL,0,1);
double cl2=iClose(NULL,0,2),op2=iOpen(NULL,0,2);
double ASK=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double BID=SymbolInfoDouble(_Symbol,SYMBOL_BID);
bool buy=cl1>op1 && MathAbs(cl2-op2)>0 && (cl1-op1)/MathAbs(cl2-op2)>Coef;
bool sell=cl1<op1 && MathAbs(cl2-op2)>0 && (op1-cl1)/MathAbs(cl2-op2)>Coef;
if(PositionsTotal()<1)
{
if(buy)
{
sl=NormalizeDouble(BID-Stop*_Point,_Digits);
tp=NormalizeDouble(BID+Take*_Point,_Digits);
trade.PositionOpen(_Symbol,0,Lot(),ASK,sl,tp);
}
if(sell)
{
sl=NormalizeDouble(ASK+Stop*_Point,_Digits);
tp=NormalizeDouble(ASK-Take*_Point,_Digits);
trade.PositionOpen(_Symbol,1,Lot(),BID,sl,tp);
}
}
if(PositionsTotal()>0 && CloseSig>0)
{
if(buy)
CloseAll(1);
if(sell && PositionGetInteger(POSITION_TYPE)==0)
CloseAll(0);
}
if(tm.day_of_week==5 && tm.hour==23 && CloseOn>0)
{
CloseAll();
}
Comment("\n Day: ",(string)tm.day_of_week,
"\n Hour: ",(string)tm.hour);
}
//+------------------------------------------------------------------+
Хочу что бы он не смотрел на стопы, если появился встречный сигнал, а переворачивал сделку
www.opentraders.ru/downloads/2949/
AM2