Прошу создать робота-помощника:
Ордер бай открывается при касании линии b1.
Тейк — линия b3.
Стоп — линия s1.
Ордер селл открывается при касании линии s1.
Тейк — линия s3.
Стоп — линия b1.
Если цена пошла в нашу сторону и коснулась второй линии (b2 для бай или s2 для селл), то половина ордера закрывается(поэтому начальный ордер в настройках минимум = 0.02) и включается трал с начальным стопом на безубытке.
Шаг трала по умолчанию пусть будет 10п(пятизнак).
На графике нужны 2 кнопки — бай и сел — нажав их, мы разрешаем роботу открывать ордер в соответствующем направлении.
После включении кнопки робот может открыть только 1 ордер в этом направлении.
Комментарии (66)
35 AM2 Сообщений: 16420 - Андрей
Редактирован: 5 июня 2020, 06:42
11 andre71g Автор Сообщений: 168 - andre71g
35 AM2 Сообщений: 16420 - Андрей
www.opentraders.ru/downloads/2684/
35 AM2 Сообщений: 16420 - Андрей
По умолчанию трендовые линии размещаются горизонтально.
Я попробовал их поставить под углом.
Потом поставил галочку «Разрешить советнику торговать» и нажал кнопки Бай и Сэлл.
Все мои установки слетели до исходного положения трендовых линий.
Пришлось выставлять заново.
Смещая линии, случайно зацепил точку цены и открыл ордер.
После всего выключил МТ4 и снова включил.
Трендовые линии из нужного положения снова оказались в положении по умолчанию и движение цены они уже не отслеживают.
Исправьте, пожалуйста. Редактирован: 9 июня 2020, 22:04
11 apologetest Сообщений: 284 - Юрий
35 AM2 Сообщений: 16420 - Андрей
11 andre71g Автор Сообщений: 168 - andre71g
2. Разрешил ему торговать.
3. Выставил линии под наклоном.
4. Нажал кнопки Бай и Селл.
Линии остались в установленном положении.
5. Перезагрузил МТ4.
Секунду-две линии еще находятся в нужном положении, а потом сбрасываются на положение по умолчанию.
И еще предложение дать возможность изменять цвет линий. На черно-белом графике бледно-голубые теряются.
11 apologetest Сообщений: 284 - Юрий
Но при касании первой линии ордер не открылся.
В чем может быть причина?
А при запуске робота на ПК наблюдаю ту же картину, что и у Андрея — при нажатии селл сразу открывается ордер в Бай, хотя до линии 1 ещё далеко Редактирован: 10 июня 2020, 18:08
11 apologetest Сообщений: 284 - Юрий
И да Юрий правильно заметил, что слетают положения линий, даже если зайти в настройки робота и выйти, ничего в них не меняя
11 andre71g Автор Сообщений: 168 - andre71g
Он не воспринимает наклонные линии. Не реагирует на них. За два дня я в этом убедился на разных МТ4 от разных брокеров.
Сегодня я линии не наклонял оставил как есть — горизонтально.
Запустил советника.
Цена пошла вниз к красным линиям. Совтник касание воспринял. Но вместо одного ордера начал открывать еще и еще по непонятному алгоритму.
Скрины прилагаю.
11 apologetest Сообщений: 284 - Юрий
11 apologetest Сообщений: 284 - Юрий
16 ssg Сообщений: 817
11 apologetest Сообщений: 284 - Юрий
Потому как с галочкой «луч» они имеют продолжение в прошлое.
Возможно, что и это влияет на результат.
11 apologetest Сообщений: 284 - Юрий
16 ssg Сообщений: 817
16 ssg Сообщений: 817
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
16 ssg Сообщений: 817
Не компилируется.
11 apologetest Сообщений: 284 - Юрий
Редактор пишет что не видит
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
но это не возможно!
или опять не качественно или не внимательно скопировали код.
16 ssg Сообщений: 817
А у вас 45 ошибок и не одного предупреждения.
Скорее всего потеряли скобки.
Выложите весь код при помощи ставки
16 ssg Сообщений: 817
Что я делаю неправильно?
fex.net/ru/s/krdzczo
fex.net/ru/s/odass8k
11 apologetest Сообщений: 284 - Юрий
16 ssg Сообщений: 817
Пол экрана внизу полоса черная.
Кодов ошибок не видать.
Как заменяли первую часть кода не увидел.
Будет код — посмотрю.
16 ssg Сообщений: 817
==========================================
А если єкран развернуть полностью, не пробовали?
Да и вообще сколько времени ушло на все эту переписку.
Не проще ли было файл скинуть?
Я ведь не программист, а простой трейдер. Редактирован: 12 июня 2020, 20:59
11 apologetest Сообщений: 284 - Юрий
youtu.be/ZyZfdtUB9go
11 apologetest Сообщений: 284 - Юрий
16 ssg Сообщений: 817
Как его дать и где найти?
Я знаю хорошо МТ4, но МетаЭдитор и программирование для меня — темный лес.
Я не квалифицированный программист, а трейдер.
С какими-то элементарными понятиями о МетаЭдиторе — скопировать, вставить и нажать кнопку «Компилировать». Редактирован: 12 июня 2020, 22:00
11 apologetest Сообщений: 284 - Юрий
ssg, что вам мешает выложить готовый файл исправленного советника?
11 andre71g Автор Сообщений: 168 - andre71g
Уже много раз сталкивался с тем, что оставляют кусок кода или строку, а потом говорят -не компилируется.
Откройте код ошибок по номерам и прочитайте что они обозначают.
Весь код я выложил, свой покажите.
Используйте кнопку code.
Редактирован: 12 июня 2020, 22:10
16 ssg Сообщений: 817
У меня нет такой кнопки code.
По крайне мере я ее не вижу.
11 apologetest Сообщений: 284 - Юрий
16 ssg Сообщений: 817
16 ssg Сообщений: 817
У меня с кодом все в порядке.Это нужно вам, а не мне.
16 ssg Сообщений: 817
Нажал и вставил то, что скопировал в Вашем посте в 12 июня 2020, 11:48
Редактирован: 12 июня 2020, 22:23
11 apologetest Сообщений: 284 - Юрий
16 ssg Сообщений: 817
Где ее увидеть?
Как ее отличить от второй, третье и т.д.?
Редактирован: 12 июня 2020, 22:30
11 apologetest Сообщений: 284 - Юрий
Вместо того, чтобы просто по человечески сбросить готовый файл?
Или в этом есть некий «кайф»?
Не понимаю…
11 apologetest Сообщений: 284 - Юрий
Вы хоть перечитайте мои посты.Я вам выложил весь советник в двух постах.
Дублирую пост первый:
Не видно весь код. Может скобку пропустили? У меня 0 ошибок 0 предупреждений.
#property copyright «Copyright 2020, AM2»
#property link «www.forexsystems.biz»
#property version «1.00»
#property strict
//--- Inputs
extern double Lots = 0.2; // лот
extern int TrailingStop = 0; // трал
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
double b1=0,b2=0,b3=0,s1=0,s2=0,s3=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
PutButton(«B»,100,160,«BUY»);
PutButton(«S»,100,120,«SELL»);
PutButton(«C»,100,80,«CLOSE»);
PutTrendLine(«B1»,Time[0],Bid+333*_Point,Time[111],Bid+333*_Point,Aqua);
PutTrendLine(«B2»,Time[0],Bid+666*_Point,Time[111],Bid+666*_Point,Aqua);
PutTrendLine(«B3»,Time[0],Bid+999*_Point,Time[111],Bid+999*_Point,Aqua);
PutTrendLine(«S1»,Time[0],Bid-333*_Point,Time[111],Bid-333*_Point,Red);
PutTrendLine(«S2»,Time[0],Bid-666*_Point,Time[111],Bid-666*_Point,Red);
PutTrendLine(«S3»,Time[0],Bid-999*_Point,Time[111],Bid-999*_Point,Red);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectDelete(0,«B»);
ObjectDelete(0,«S»);
ObjectDelete(0,«C»);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,«Arial»);
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,9);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
Весь код не входит. Поэтому частями.
16 ssg Сообщений: 817
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void BU()
{
bool cl=1,m=1;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(Bid>b2 && OrderLots()==Lots)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),b1,OrderTakeProfit(),0,clrAquamarine);
cl=OrderClose(OrderTicket(),OrderLots()/2,Bid,Slip,clrAquamarine);
}
}
if(OrderType()==OP_SELL)
{
if(Ask<s2 && OrderLots()==Lots)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),s1,OrderTakeProfit(),0,clrAquamarine);
cl=OrderClose(OrderTicket(),OrderLots()/2,Ask,Slip,clrAquamarine);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Trailing()
{
bool mod;
double sl=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>TrailingStop*_Point)
{
sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
if(OrderStopLoss()<sl)
{
Print(«SL: »,sl, " TP: ",OrderTakeProfit());
mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
return;
}
}
}
if(OrderType()==OP_SELL)
{
if(OrderOpenPrice()-Ask>TrailingStop*_Point)
{
sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
if(OrderStopLoss()>sl || (OrderStopLoss()==0))
{
Print(«SL: »,sl, " TP: ",OrderTakeProfit());
mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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(b1,_Digits);
tp=NormalizeDouble(s3,_Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
sl=NormalizeDouble(s1,_Digits);
tp=NormalizeDouble(b3,_Digits);
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
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()<2)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
b1=ObjectGetDouble(0,«B1»,OBJPROP_PRICE1);
b2=ObjectGetDouble(0,«B2»,OBJPROP_PRICE1);
b3=ObjectGetDouble(0,«B3»,OBJPROP_PRICE1);
s1=ObjectGetDouble(0,«S1»,OBJPROP_PRICE1);
s2=ObjectGetDouble(0,«S2»,OBJPROP_PRICE1);
s3=ObjectGetDouble(0,«S3»,OBJPROP_PRICE1);
BU();
if(TrailingStop>0) Trailing();
if(CountTrades()<1)
{
if(ObjectGetInteger(0,«B»,OBJPROP_STATE)==1)
{
if(Ask>b1)
PutOrder(0,Ask);
ObjectSetInteger(0,«B»,OBJPROP_STATE,false); //--- отжать кнопку
}
if(ObjectGetInteger(0,«S»,OBJPROP_STATE)==1)
{
if(Bid<s1)
PutOrder(1,Bid);
ObjectSetInteger(0,«S»,OBJPROP_STATE,false); //--- отжать кнопку
}
}
if(OrdersTotal()>0 && ObjectGetInteger(0,«C»,OBJPROP_STATE)==1)
{
CloseAll();
ObjectSetInteger(0,«C»,OBJPROP_STATE,false);
}
Comment("\n B1: ",b1,
"\n B2: ",b2,
"\n B3: ",b3,
"\n S1: ",s1,
"\n S2: ",s2,
"\n S3: ",s3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
16 ssg Сообщений: 817
Сразу претензия к заводу — у меня не стреляет.
Меня поражают фразы торговцев советниками: «Я не знаю Мкл». Для меня это
звучит как оправдание водителя совершившего ДТП: «Пьяный был».
Не обязательно уметь программировать (хотя желательно), но разбираться что делает тот или иной блок обязаны если хотите заниматься авто торговлей.
А если я (или другой) заложит в алгоритм команду — перевести все ваши деньги на мой (другой ) счет? Или по баксу в день переводить? Или данные скопировать, троян запустить.Это очень просто сделать.
Поэтому никогда не пользуйтесь экзешными (не открытыми) кодами.
Ладно, просто надоело это доводить через одного.Поэтому и просил ваш код выложить.
Р.С. полистайте на досуге, очень пригодиться book.mql4.com/ru/appendix/examples
16 ssg Сообщений: 817
Мой косяк…
Сегодня аккуратненько так скопировал первую часть кода. Получилось 115 строчек.
Потом добавил вторую часть. Всего строчек стало 286.
Но компиляция не состоялась. ((
Я две части свел в один текстовый файл и закинул на файлообменник.
Посмотрите, что там не так, пожалуйста.
fex.net/ru/s/9dlr1zv Редактирован: 13 июня 2020, 08:48
11 apologetest Сообщений: 284 - Юрий
Что пишут при компиляции с самого начала? Редактирован: 13 июня 2020, 09:16
16 ssg Сообщений: 817
16 ssg Сообщений: 817
16 ssg Сообщений: 817
вход в советнике идет по правому концу линии, это нужно учитывать.
также нужно смотреть положение линий для бу. на то он и полуавтомат
www.opentraders.ru/downloads/2684/
35 AM2 Сообщений: 16420 - Андрей
16 ssg Сообщений: 817
если так удобнее обновлю в базе
35 AM2 Сообщений: 16420 - Андрей
Скачал новый вариант.
Все откомпилировалось без проблем. Ура!!!
1. Поставил советника на график.
2. Разрешил ему торговать.
3. Выставил линии.
4. Зашел в настройки и поставил false в «показывать линии». Закрыл настройки — линии остались на месте.
5. Нажал Бай и Сэлл.
Получилась вот такая картинка.
При таком положении линий советник должен работать?
Не знаю как в понедельник на реальном графике будет, но сегодня в тестере стратегий не сработал.
И, если не трудно, сделайте возможность менять цвет линий. На светлом графике бледно-голубые плохо просматриваются.
11 apologetest Сообщений: 284 - Юрий
— вот блок расчета линий в настоящий момент времени, только их нужно протянуть дальше цены вправо. также здесь поправлен вход. он только между первой и второй линией:
А разве в настоящий момент без предлагаемых исправлений вход не делается при касании ценой первой линии? Редактирован: 13 июня 2020, 13:01
11 apologetest Сообщений: 284 - Юрий
что для вас касание линии? и что для машины?
35 AM2 Сообщений: 16420 - Андрей
Но потом Вы мне объяснили, что это не так.
На скрине есть трендовая линия (1) и точка цены (2).
Как только точка цены со следующим тиком окажется хоть на один пипс выше трендовой линии, мы считаем, что касание произошло и открываем ордер по этой сформировавшейся цене.
Правильно понимаю?
А как в данный момент работает советник? Редактирован: 13 июня 2020, 14:08
11 apologetest Сообщений: 284 - Юрий
подобным образом. как только цена оказалась в промежутке между первой и второй линиями.
35 AM2 Сообщений: 16420 - Андрей
Обновляйте…
11 apologetest Сообщений: 284 - Юрий
А учебник прочитайте. Начните именно с той страницы что я отправил.
Там доходчивым языком поясняют на простых примерах что и как работает.
Каждая строка кода с пояснениями. Редактирован: 13 июня 2020, 20:35
16 ssg Сообщений: 817
1. продолжение линии вправо.
2. толщина линий.
3. стиль линий.
4. цвет линий.
5. удаление линий при деинициализации.
6. отключение выставления линий в начале работы.
7. расчет значений линий в данный момент.
www.opentraders.ru/downloads/2684/
35 AM2 Сообщений: 16420 - Андрей
Нет ни одной лишней фразы.
Попробуйте скачать файлик отсюда
yadi.sk/d/onpdDe9hLCvJfQ
А со статьей знакомлюсь потихоньку.
11 apologetest Сообщений: 284 - Юрий
У вас с самого начала неправильно с копировалось.
Элементарные ошибки по незнанию начальных правил.
В таких случаях начинайте смотреть самую первую ошибку.
У вас в коде: #property copyright «Copyright 2020, AM2»
А должно быть как у меня :
Сравните каждую букву и каждый символ и найдите разницу.
Когда я вам разъяснял что нужно делать сначала привел код через кнопку код.
Затем тот же код я вам показывал через текст.
Вы по незнанию основ сначала скопировали только вторую часть кода, а затем взяли обе части, но не из файла с кодом, а из текста.
А там произошли изменения в написании.
Вам домашнее задание (если конечно вы хотите разобраться пройдитесь по всему коду и внесите необходимые изменения.
Потом с компилируйте весь код.
Первое я уже сделал.
Подсказка: пробежал глазами по коду везде одно и та же ошибка.
Редактирован: 13 июня 2020, 21:37
16 ssg Сообщений: 817
============================
Вопрос по советнику.
На некоторых инструментах наблюдается слияние линий.
Или же совершенно огромные расстояния между ними.
Как с этим справиться?
11 apologetest Сообщений: 284 - Юрий
рисовать ручками
35 AM2 Сообщений: 16420 - Андрей
Можно просто в самом начале работы с индикатором удалить линии, потом снять true в «показывать линии» и самостоятельно выставлять трендовые.
А советник сам уже разберется где первая, где вторая, а где третья?
Если это так, то размещение линий намного упрощается… )) Редактирован: 14 июня 2020, 21:20
11 apologetest Сообщений: 284 - Юрий
Благодарю за проделанную работу!
Сегодня запустил робота на реальном счете.
Он чудесно открыл ордер на первой линии и прекрасно закрыл половину объема на второй линии.
Но на третьей линии советник ордер на закрыл.
Пришлось помочь ему руками.
Прошу отредактировать этот момент. Редактирован: 15 июня 2020, 16:00
11 apologetest Сообщений: 284 - Юрий
11 andre71g Автор Сообщений: 168 - andre71g
После выставления БУ сов должен сразу начинать тралить с шагом 10п(4хзнак), этого не происходит при трал=0 в настройках. Если придать тралу значение, то тралит. Но расстояния между 1(открытие ордера) и 2(перевод в бу) линиями всегда разные, тем более на разных ТФ. Лучше бы уж трал по умолчанию включался сразу после перевода в бу.
Ну и как уже писали выше, закрытие ордера хотелось бы видеть при касании линий b3 и s3.
11 andre71g Автор Сообщений: 168 - andre71g
35 AM2 Сообщений: 16420 - Андрей
7 s22aa Сообщений: 25 - Александр
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий