Lerdon
Destian Farbius

 
Уровень 9

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Перевести советник из MQL4 в MQL5

Доброго дня, друг!

Сможешь перевести советник из mql4 в mql5?
//--- Inputs

extern double Profit = 0.31; // Ср.Прибыль в %
extern double Loss = 0.67; // Ср.Убыток в %
extern int Slip = 30; // проскальзывание
extern int Magic = 123; // ID ордеров

//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| Подсчет позиций |
//+------------------------------------------------------------------+
int Trades(
string sy="", // имя символа ("" — все символы)
int ty=-1, // тип ордера (-1 — все типы ордеров)
int mg=-1) // магическое число ордеров (-1 — все магики)
{
int num=0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==sy || sy=="")
{
if(mg<0 || OrderMagicNumber()==mg)
{
if(ty<0 || ty==OrderType())
num++;
}
}
}
}
return(num);
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

double Pro()
{
double pro=(AccountEquity()-AccountBalance())/AccountBalance()*100;
return(pro);
}
//+------------------------------------------------------------------+
//| Закрытие всех ордеров |
//+------------------------------------------------------------------+
void CloseOrders(){
//Обновляем значения цен перед закрытием ордеров
RefreshRates();
//Выводим в терминал общее количество открытых и отложенных ордеров.
Print(OrdersTotal());
//Создаем цикл, который перебирает все ордера. Цикл начинает работать с последнего ордера, чтобы ни один ордер не был пропущен.
for(int i=(OrdersTotal()-1);i>=0;i--){
//Если ордер не может быть выбран, выводим ошибку.
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false){
Print(«Ошибка. Нельзя выбрать ордер — »,GetLastError());
break;
}
//Создаем переменную результата, чтобы проверить, успешна ли прошла операция.
bool res=false;
//Проскальзывание, которое представляет собой разницу между текущей ценой и ценой закрытия.
int Slippage=0;
//Цены Bid и Ask для ордера.
double BidPrice=MarketInfo(OrderSymbol(),MODE_BID);
double AskPrice=MarketInfo(OrderSymbol(),MODE_ASK);
//Закрытие ордера по его текущей цене в зависимости от типа ордера.
if(OrderType()==OP_BUY){
res=OrderClose(OrderTicket(),OrderLots(),BidPrice,Slippage);
}
if(OrderType()==OP_SELL){
res=OrderClose(OrderTicket(),OrderLots(),AskPrice,Slippage);
}
//Если была ошибка, выводим ее в журнал ошибок.
if(res==false) Print(«Ошибка. Нельзя закрыть ордер — »,OrderTicket()," — ",GetLastError());
}
}

//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(Pro()>=Profit*Trades() || Pro()<=-Loss*Trades())
{
CloseOrders();
}
int Pos;
Pos = Trades();
Comment("\n Текущий результат: ",NormalizeDouble(Pro(), 3)+" %" +"\n"
+"\n"
+" Процент прибыли= ", DoubleToStr(Profit*Pos, 3)+" %"
+"\n"
+" Ожидаемый баланс= ", DoubleToStr(((AccountBalance()*(Profit*Pos))/100)+AccountBalance(), 3) +"\n"
+" Ожидаемая прибыль= ", DoubleToStr((((AccountBalance()*(Profit*Pos))/100)+AccountBalance())-AccountBalance(), 3) +"\n"
+"\n"
+" Процент убытка= ", DoubleToStr(Loss*Pos, 3)+" %"
+"\n"
+" Ожидаемый баланс= ", DoubleToStr(AccountBalance()-((AccountBalance()*(Loss*Pos))/100), 3) +"\n"
+" Ожидаемый убыток= ", DoubleToStr(AccountBalance()-(AccountBalance()-((AccountBalance()*(Loss*Pos))/100)), 3) +"\n"
+"\n"
+" Текущий Баланс= " +DoubleToStr(AccountBalance(),3)
+"\n"
+" Средcтва= " +DoubleToStr(AccountEquity(), 3))
;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

Советник по сути работает по логике:
zakaz.opentraders.ru/85734.html
Но чуть доработан на транслирование статистики.
  • 0
  • Просмотров: 856
  • 26 августа 2022, 15:41
  • Lerdon
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник по системе
26 августа 2022
27 августа 2022

Брокер для ваших роботов, 15 лет на рынке

Комментарии (2)

+
0
пишите тз, если оно будет простым тогда рассмотрю
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 26 августа 2022, 18:03
+
0
Смысл советник чтобы в нем было два параметра
x
y
x — это размер убытка на одну позицию, при достижении которого все позиции закрываются.
если выставлен параметр 5 то в случае например 3 одновременно открытых позиций все они закроются если убыток составит 15% так как 5(выставленный параметр x) * количество ордеров = общий убыток 15%. если открыто 4 сделки до при 20% убытка позиции закроются. и т.д.
y — это размер прибыли на одну позицию при которой закроются все позиции.
Важно именно что советник расчитывал указанный параметр в соотношении с количеством ордеров.
avatar

  9  Lerdon Автор Сообщений: 242 - Destian Farbius

  • 28 августа 2022, 16:58

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий