droba
Droba

 
Уровень 9

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Доработка советника.

Доброго времени суток.
Есть советник с расчетом риска на сделку.
Просьба доработать советник:
— если сделка убыточная, то риск увеличить на один.

советник прилагается.
Proboy_High_Low.mq 4 (0 Kb)
  • 0
  • Просмотров: 2236
  • 24 марта 2022, 12:36
  • droba
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
скиньте советник ссылкой или кодом
avatar

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

  • 24 марта 2022, 17:28
+
0
//+------------------------------------------------------------------+
//| Proboy_High_Low.mq4|
//| Copyright 2021 |
//| www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright «Copyright 2021»
#property link «www.forexsystems.biz»
#property version «1.00»
#property strict

//--- Inputs
extern double Lots = 0.1; // лот
extern double Risk = 0; // риск
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
extern string Comm = ""; // коммент

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;

if(type==1 || type==3 || type==5)
{
clr=Red;
sl=NormalizeDouble(High[1]+(Ask-Bid),Digits);
tp=NormalizeDouble(Bid-(High[0]-Low[1]),Digits);
}

if(type==0 || type==2 || type==4)
{
clr=Blue;
sl=NormalizeDouble(Low[1]-(Ask-Bid),Digits);
tp=NormalizeDouble(Ask+(High[1]-Low[0]),Digits);
}
for(int k=1; k<=10; k++)
{
r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,Comm,Magic,0,clr);
if(r>0)
{
Print(«Order is placed successfully: „+“ OOP: »,price," LOT: ",Lot());
break;
}
Sleep(3000);
}
return;
}
//+------------------------------------------------------------------+
//| расчет лота |
//+------------------------------------------------------------------+
double Lot()
{
double lot=Lots;
if(Lots==0) lot=AccountBalance()*Risk/100000;
return(lot);
}
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу |
//+------------------------------------------------------------------+
int CountOrders(int type)
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==type)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool FindLastTimeOrder()
{
for(int i=0; i<OrdersHistoryTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol() && OrderType()<2 && OrderMagicNumber()==Magic)
{
if(OrderOpenTime()>=Time[0])
{
return(false);
}
}
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double signal()
{
double sig=3;
if(Close[1]>Open[1] && Bid>=High[1])
{
sig=0;
}
if(Close[1]<Open[1] && Ask<=Low[1])
{
sig=1;
}
return(sig);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(FindLastTimeOrder())
{
if(CountOrders(0)<1 && signal()==0)
{
PutOrder(0,Ask);
}
if(CountOrders(1)<1 && signal()==1)
{
PutOrder(1,Bid);
}
}
}
//+------------------------------------------------------------------+

avatar

  9  droba Автор Сообщений: 239 - Droba

  • 24 марта 2022, 18:04
+
0
avatar

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

  • 24 марта 2022, 22:41
+
0
Функция увеличения риска не работает.
Для наглядности подправил немного код, ТР и SL сделал по 300 пипсов.
После SL риск не увеличился.



avatar

  9  droba Автор Сообщений: 239 - Droba

  • 25 марта 2022, 06:58
+
0
риск увеличивается. установите Risk значение больше и посмотрите в тестере — все работает.
avatar

  14  verta81 Сообщений: 392

  • 25 марта 2022, 14:22
+
0
С какого значения начинает работать?
Редактирован: 25 марта 2022, 17:10
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 25 марта 2022, 17:08
+
0
Покажите график прибыльности с Вашего тестера.
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 25 марта 2022, 17:15

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