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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от IGOR1367



индикатор просадки Комментариев 13
2021-11-03 09:59:28Рейтинг 0

советник трал Комментариев 43
2021-09-14 20:36:57Рейтинг 0

простой советник по стрелкам индикатора

Здравствуйте уважаемые программисты! прошу сделать простой советник по стрелочному индикатору, чтобы сделки открывались и закрывались по сигналам алерта или по цветам стрелок (красная на продажу, зеленая на покупку). к советнику прикрепить лот, стоплосс и магик и больше ничего не нужно, чтобы советник работал строго по сигналам. для мт4 код индикатора #property copyright «60SecondTrades.com»
#property link ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int ADXbars = 14;
extern int CountBars = 350;
extern string SoundFile=«Alert.wav»;
extern bool UseSound=true;
bool SoundBuy = False;
bool SoundSell = False;
double gda_84[];
double gda_88[];
double gd_92;
double gd_100;
double gd_108;
double gd_116;

int init() {
string ls_0;
IndicatorBuffers(2);
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 108);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 108);
SetIndexBuffer(0, gda_84);
SetIndexBuffer(1, gda_88);
return (0);
}

int start() {
if (CountBars >= Bars) CountBars = Bars;
SetIndexDrawBegin(0, Bars — CountBars);
SetIndexDrawBegin(1, Bars — CountBars);
int li_8 = IndicatorCounted();
if (li_8 < 0) return (-1);
if (li_8 < 1) {
for (int li_0 = 1; li_0 <= CountBars; li_0++) gda_84[CountBars — li_0] = 0.0;
for (li_0 = 1; li_0 <= CountBars; li_0++) gda_88[CountBars — li_0] = 0.0;
}
for (int li_4 = CountBars; li_4 >= 0; li_4--) {
gd_92 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_PLUSDI, li_4 — 1);
gd_100 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_PLUSDI, li_4);
gd_108 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_MINUSDI, li_4 — 1);
gd_116 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_MINUSDI, li_4);
if (gd_92 > gd_108 && gd_100 < gd_116) gda_84[li_4] = Low[li_4] — 5.0 * Point;
if (gd_92 < gd_108 && gd_100 > gd_116) gda_88[li_4] = High[li_4] + 5.0 * Point;
}
//+------------------------------------------------------------------+
if (gda_84[1] != EMPTY_VALUE && gda_84[1] != 0 && SoundBuy)
{
SoundBuy = False;
if (UseSound) PlaySound (SoundFile);
Alert(«SixtySecondTrades(», Symbol(), ", ", Period(), ") — BUY!!!");
}
if (!SoundBuy && (gda_84[1] == EMPTY_VALUE || gda_84[1] == 0)) SoundBuy = True;
if (gda_88[1] != EMPTY_VALUE && gda_88[1] != 0 && SoundSell)
{
SoundSell = False;
if (UseSound) PlaySound (SoundFile);
Alert(«SixtySecondTrades (», Symbol(), ", ", Period(), ") — SELL!!!");
}
if (!SoundSell && (gda_88[1] == EMPTY_VALUE || gda_88[1] == 0)) SoundSell = True;
//+------------------------------------------------------------------+
return (0);
}
  • 0
  • Просмотров: 10214
  • 21 февраля 2020, 11:00
  • IGOR1367
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
посмотрю сегодня
avatar

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

  • 21 февраля 2020, 17:34
+
0
желательно по цветам стрелок сделки открывались, зеленая стрелка-открылась сделка на покупку а как цвет поменялся на красный то сделка закрылась и снова открылась на продажу.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 21 февраля 2020, 18:42
+
0
скиньте файлом
avatar

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

  • 21 февраля 2020, 20:13
+
0
#property copyright «60SecondTrades.com»
#property link ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int ADXbars = 14;
extern int CountBars = 350;
extern string SoundFile=«Alert.wav»;
extern bool UseSound=true;
bool SoundBuy = False;
bool SoundSell = False;
double gda_84[];
double gda_88[];
double gd_92;
double gd_100;
double gd_108;
double gd_116;

int init() {
string ls_0;
IndicatorBuffers(2);
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 108);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 108);
SetIndexBuffer(0, gda_84);
SetIndexBuffer(1, gda_88);
return (0);
}

int start() {
if (CountBars >= Bars) CountBars = Bars;
SetIndexDrawBegin(0, Bars — CountBars);
SetIndexDrawBegin(1, Bars — CountBars);
int li_8 = IndicatorCounted();
if (li_8 < 0) return (-1);
if (li_8 < 1) {
for (int li_0 = 1; li_0 <= CountBars; li_0++) gda_84[CountBars — li_0] = 0.0;
for (li_0 = 1; li_0 <= CountBars; li_0++) gda_88[CountBars — li_0] = 0.0;
}
for (int li_4 = CountBars; li_4 >= 0; li_4--) {
gd_92 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_PLUSDI, li_4 — 1);
gd_100 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_PLUSDI, li_4);
gd_108 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_MINUSDI, li_4 — 1);
gd_116 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_MINUSDI, li_4);
if (gd_92 > gd_108 && gd_100 < gd_116) gda_84[li_4] = Low[li_4] — 5.0 * Point;
if (gd_92 < gd_108 && gd_100 > gd_116) gda_88[li_4] = High[li_4] + 5.0 * Point;
}
//+------------------------------------------------------------------+
if (gda_84[1] != EMPTY_VALUE && gda_84[1] != 0 && SoundBuy)
{
SoundBuy = False;
if (UseSound) PlaySound (SoundFile);
Alert(«SixtySecondTrades(», Symbol(), ", ", Period(), ") — BUY!!!");
}
if (!SoundBuy && (gda_84[1] == EMPTY_VALUE || gda_84[1] == 0)) SoundBuy = True;
if (gda_88[1] != EMPTY_VALUE && gda_88[1] != 0 && SoundSell)
{
SoundSell = False;
if (UseSound) PlaySound (SoundFile);
Alert(«SixtySecondTrades (», Symbol(), ", ", Period(), ") — SELL!!!");
}
if (!SoundSell && (gda_88[1] == EMPTY_VALUE || gda_88[1] == 0)) SoundSell = True;
//+------------------------------------------------------------------+
return (0);
}
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 21 февраля 2020, 20:36
+
0
Индикатор имеет 38 ошибок или у меня что-то не правильно скопировалось
Редактирован: 21 февраля 2020, 21:27
avatar

  20  alex30774 Сообщений: 748

  • 21 февраля 2020, 21:12
+
0
у меня нет ошибок, на графике индикатор работает хорошо, наверно скопировал не так.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 21 февраля 2020, 21:56
+
0
Кстати этот индикатор обычное пересечение индикатора ADX: Di+ c Di-
avatar

  20  alex30774 Сообщений: 748

  • 21 февраля 2020, 23:27
+
0
сам индикатор я не знаю как скинуть здесь, у меня не получилось.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 21 февраля 2020, 20:38
+
0
загрузите в базу и дайте ссылку. в таком виде его надо долго восстанавливать
avatar

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

  • 21 февраля 2020, 20:45
+
0
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 21 февраля 2020, 21:08
+
0
trueforex.pp.ua/%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0%20%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%B0%20SixtySecondTrades_Alert.mq4 я дал ссылку на сайт, там можно скачать. я первый раз заказываю и еще пока ничего не знаю что и как правильно сделать.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 21 февраля 2020, 21:11
+
0
посмотрю в выходные если это индикатор с прошлого топика
avatar

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

  • 21 февраля 2020, 21:16
+
0
SixtySecondTrades_Alert. название индикатора
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 21 февраля 2020, 21:18
+
0
А почему такие тз кривые? Нельзя ли составить качественно что все поняли?
avatar

  3  crediteuropebank1 Сообщений: 54 - Александр

  • 22 февраля 2020, 00:02
+
0
вы о чем, что именно кривые?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 22 февраля 2020, 15:32
+
0
ТЗ составляют так чтобы понял не только я но и все. Потом прописываются четко по номерам отдельно перечнем, то что хотите чтобы присутствовало в советнике. Но никак не строчнкой, читать трудно. Мысли в скриншотах должны быть четко изложены (где входим, где выходим) и показать стрелками и текстом.
avatar

  3  crediteuropebank1 Сообщений: 54 - Александр

  • 23 февраля 2020, 18:57
+
0
извини, я не научился редактировать а кому трудно читать пусть не читают!
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 23 февраля 2020, 20:56
+
0
Ладно, добро)
avatar

  3  crediteuropebank1 Сообщений: 54 - Александр

  • 23 февраля 2020, 22:29
+
+1
индикатор в папке должен иметь имя «SixtySecondTrades»



www.opentraders.ru/downloads/2575/
avatar

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

  • 23 февраля 2020, 09:11
+
0
здравствуйте андрей! с праздником вас! прогнал в тестере на четырехчасовом графике за месяц ни одной сделки не открыл, хотя сигналов было много а на часовом много пропусков сигналов и из за этого много сделок в минусе. все сделки открывались с некоторой задержкой по сравнению с сигналами, некоторые сделки открывались даже после семи баров а некоторые даже без сигналов, нельзя как нибудь исправить?
Редактирован: 23 февраля 2020, 11:43
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 23 февраля 2020, 11:02
+
0


вторая сделка без сигнала срабатала, пятая, седьмая и т.д. сделка непонятно как сработалась.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 23 февраля 2020, 15:19
+
0
вторая сделка без сигнала срабатала, пятая, седьмая и т.д. сделка непонятно как сработалась.


в левом верхнем углу я всегда вывожу сигнал индикатора. если есть сигнал, ордер открывается, если нет то уж извините.

лучше пользуйтесь стандартными индикаторами или свечными паттернами
avatar

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

  • 23 февраля 2020, 18:32
+
0
тогда почему сделки открываются когда нет сигналов? вторая сделка открылась без сигналов.
Редактирован: 23 февраля 2020, 21:12
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 23 февраля 2020, 20:58
+
0
индикатор может перерисоваться или визуальные сигналы не соответствуют тем что дают буферы
avatar

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

  • 23 февраля 2020, 21:47
+
0
я вас просил чтобы советник работал не по буферам а по алерту или по цветам стрелок, сигналы алерта работают отлично, стрелки не перерисовываются!
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 07:30
+
0
ДОБРОЕ УТРО АНДРЕЙ! НЕ ХОРОШО НЕ УЧАСТВОВАТЬ В ЭТОМ ТОПИКЕ, ВАС ПРОСЯТ СДЕЛАТЬ НОРМАЛЬНОГО СОВЕТНИКА А ВЫ УВИЛИВАЕТЕ. ВОТ ВЧЕРА ПОЗДНО ВЕЧЕРОМ КОГДА БЫЛ ОЧЕНЬ ТИХИЙ ФЛЕТ, Я ЗАМЕТИЛ КАК РАБОТАЕТ ВАШ СОВЕТНИК, ПОЯВИЛСЯ СИГНАЛ АЛЕРТА И СТРЕЛКА И ГДЕ ТО ЧЕРЕЗ МИНУТУ ОТКРЫЛАСЬ СДЕЛКА ЭТО ПОТОМУ ЧТО СОВЕТНИК ЖДАЛ НУЖНОГО БАРА ПОСЛЕ СИГНАЛА, У МЕНЯ ВОПРОС — ПОЧЕМУ ВЫ СПРОГРАММИРОВАЛИ СОВЕТНИКА ПО БАРАМ И С ЯВНОЙ ЗАДЕРЖКОЙ А НЕ СРАЗУ С ПОЯВЛЕНИЕМ СИГНАЛА АЛЕРТА?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 09:53
+
0




так то он правильно открывает, даже неплохо и флет пропускает, но тестер тут не поможет, а вот на немо нечего так даже, трал прицепил и нормально.
Редактирован: 24 февраля 2020, 03:31
avatar

  16  cerber04 Сообщений: 409

  • 24 февраля 2020, 03:29
+
0
ночью на реальный график поставил этот советник на три пары а он так и не открыл сделки, я андрея просил по сигналам алерта или по цветам стрелок на графике сделать а он мне про какие то не совпадении сигналы с буферами.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 07:24
+
0
Если условия истина то данные записываются в буфер. Если в буфере есть данные срабатывает стрелка (алерт). Если данные не записались в буфер нет стрелки(алерт). Даже если условия выполнены.
avatar

  8  Kudryashov Сообщений: 129

  • 26 февраля 2020, 09:08
+
0
если стрелка срабатывает значит данные буфера записываются а советник не реагирует, что надо сделать?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 09:21
+
0
как у вас открылись две сделки?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 09:48
+
0
да это от другого советника
avatar

  16  cerber04 Сообщений: 409

  • 24 февраля 2020, 14:10
+
0
ЗДЕСЬ КТО НИБУДЬ ИСПРАВИТ ЭТОТ КРИВОЙ СОВЕТНИК ЗА ВОЗНАГРАЖДЕНИЕ?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 07:35
+
0
avatar

  9  Servir Сообщений: 84

  • 24 февраля 2020, 20:59
+
0
архив поврежден или имеет неизвестный формат
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 21:06
+
0
только что проверил, все открывается простым WinRar и им же паковалось
avatar

  9  Servir Сообщений: 84

  • 24 февраля 2020, 21:30
+
0
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 21:43
+
0
ВСЕГДА СКАЧИВАЛ БЫЛО НОРМАЛЬНО А ВОТ ВАШЕ ПОЧЕМУ ТО НИКАК.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 21:53
+
0
Там формат rar. Для открытия такого архива нужно установить winrar — www.win-rar.com/start.html

Servir, рекомендуется архивировать в формат zip
Тогда архивы можно будет открывать без установки дополнительного ПО

avatar

  45  Bishop Сообщений: 5802 - АЛЬФАХАМЕЦ-Машковод

  • 24 февраля 2020, 21:59
+
0
СПАСИБО, ВИДИМО У МЕНЯ БЫЛ СТАРЫЙ АРХИВАТОР.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 23:10
+
0
ПОЧЕМУ ПРИ УСТАНОВКЕ СОВЕТНИКА СРАЗУ ОТКРЫВАЕТ 2 СДЕЛКИ В РАЗНЫХ НАПРАВЛЕНИЯХ И СРАЗУ ЖЕ ЗАКРЫВАЕТ И ТАК ЖЕ ПОЛУЧАЕТСЯ КОГДА Я ВРЕМЯ МЕНЯЮ.
Редактирован: 24 февраля 2020, 23:09
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 23:08
+
0
ПЕРВАЯ ДЛИННАЯ СДЕЛКА НЕ ПРАВИЛЬНО ОТКРЫЛАСЬ, ВЕРХНИЙ СИНИЙ СИГНАЛ ЭТО СИГНАЛ НА ПРОДАЖУ А СОВЕТНИК ПОЧЕМУ ТО ОТКРЫЛ ПОКУПКУ, ВТОРАЯ СДЕЛКА ДЛИННАЯ МЕЖДУ ДВУМЯ ВЕРХНИМИ СИГНАЛАМИ ДОЛЖЕН БЫТЬ НИЖНИЙ НА ПОКУПКУ, ВИДИМО НИЖНИЙ СИГНАЛ ПЕРЕКРЫЛА СДЕЛКА, ВМЕСТО ПОКУПКИ ОТКРЫЛАСЬ НА ПРОДАЖУ, СОВЕТНИК БАРАХЛИТ, НЕ ПРАВИЛЬНО ОТКРЫВАЕТ СДЕЛКИ! ЕСЛИ ПРИСМОТРЕТЬСЯ НА ОЧЕНЬ КОРОТКИХ СДЕЛКАХ ТО ТАМ НЕТ СИГНАЛОВ А СДЕЛКИ ПОЧЕМУ ТО СОВЕРШАЛИСЬ.
Редактирован: 24 февраля 2020, 23:58
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 24 февраля 2020, 23:53
+
0
Вы просили сделать советник по индикатору — он сделан (сделки открываются).барахлит не советник а индикатор, он выдает сигналы.В индикаторе присутствуют сигналы не отображающиеся цветовым полем на графике.
Редактирован: 25 февраля 2020, 05:02
avatar

  9  Servir Сообщений: 84

  • 25 февраля 2020, 04:59
+
0
ХОРОШО, ТОГДА ПОЧЕМУ НА ЭТОМ СКРИНШОТЕ НЕ ОТКРЫЛАСЬ СДЕЛКА? И СИГНАЛ АЛЕРТА И СТРЕЛОЧКА ЕСТЬ И ДАЖЕ НА ЛЕВОМ ВЕРХНЕМ ГРАФИКЕ ГДЕ НАПИСАНО magena ПОМЕНЯЛИСЬ ЦИФРЫ ЭТО ГОВОРИТ ЧТО ПОСТУПИЛ СИГНАЛ СОВЕТНИКУ А ЕМУ ХОТЬ БЫ ЧТО!
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 08:30
+
0
Только сейчас сообразил :D 
Значение цены 1653… А в советнике заложено не magenta < 1000 и больше 0.
Так что советник не рассчитан под золото и индексы у которых до запятой бывают значения больше 1000:D 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 23:26
+
0

ВОТ ЕЩЕ СКРИНШОТ, СКОЛЬКО СИГНАЛОВ И НИ ОДНА СДЕЛКА НЕ ОТКРЫЛАСЬ А ДВЕ СДЕЛКИ КОТОРЫЕ БЫЛИ МОМЕНТАЛЬНО ОТКРЫТЫ И ЗАКРЫТЫ ПРИ ОТКРЫТИЕ ТЕРМИНАЛА И ЭТО ПРОИЗОШЛО НА ВСЕХ ПАРАХ ГДЕ БЫЛ УСТАНОВЛЕН ВАШ СОВЕТНИК. ВЫ ПРОВЕРЯЛИ РАБОТУ ВАШЕГО СОВЕТНИКА НА РЕАЛЬНОМ ГРАФИКЕ?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 08:46
+
0
ВОТ ВЧЕРА ПОЗДНО ВЕЧЕРОМ КОГДА БЫЛ ОЧЕНЬ ТИХИЙ ФЛЕТ, Я ЗАМЕТИЛ КАК РАБОТАЕТ ВАШ СОВЕТНИК, ПОЯВИЛСЯ СИГНАЛ АЛЕРТА И СТРЕЛКА И ГДЕ ТО ЧЕРЕЗ МИНУТУ ОТКРЫЛАСЬ СДЕЛКА ЭТО ПОТОМУ ЧТО СОВЕТНИК ЖДАЛ НУЖНОГО БАРА ПОСЛЕ СИГНАЛА, У МЕНЯ ВОПРОС — ПОЧЕМУ ВЫ СПРОГРАММИРОВАЛИ СОВЕТНИКА ПО БАРАМ И С ЯВНОЙ ЗАДЕРЖКОЙ А НЕ СРАЗУ С ПОЯВЛЕНИЕМ СИГНАЛА АЛЕРТА?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 09:54
+
0
А если параметр Shift паставить 0, то тогда задержки не должно быть, не пробовали с таким параметром торговать.
А если у вас такой классный индикатор, то попробуйте на нём с недельку поторговать в ручном режиме, заодно проверите бубут ли ваши сделки открытые в ручную совпадать с сигналами индикатора.
avatar

  20  alex30774 Сообщений: 748

  • 25 февраля 2020, 10:30
+
0
У МЕНЯ ИНДИКАТОР СТОИТ НА ЧЕТЫРЕХЧАСОВОМ ГРАФИКЕ, ВЫ ПРЕДСТАВЛЯЕТЕ СКОЛЬКО МНЕ СИДЕТЬ ПЕРЕД ЭКРАНОМ КОГДА ПОЯВИТСЯ СИГНАЛ? А ПРО ПАРАМЕТР ПОЖАЛУЙСТА ПО ПОДРОБНЕЙ, ЧТО МНЕ НАДО СДЕЛАТЬ?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 10:40
+
0
В настройках советника параметр Shift выставить на 0(по умолчанию стоит на 1 поэтому сделки открываются после закрытия бара, а не на нулевом, то есть текущем)
avatar

  20  alex30774 Сообщений: 748

  • 25 февраля 2020, 10:57
+
0
ПОСТАВИЛ 0 А ТОЛКУ? НА ДЕВЯТЬ ПАР СТОИТ ЭТОТ СОВЕТНИК И НИ ОДНА СДЕЛКА С УТРА НЕ ОТКРЫЛАСЬ.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 11:14
+
0
Советники торгуют по буферам, по другому не умеют(предъявляйте притензии на этот счёт метаквотовцам), а в индюке похоже показания буферов и сигналов не совподают.И это скорей всего, из-за того что програмист писавший индикатор очень за дорого хотел его продать, вот и написал грааль с красивой картинкой.
avatar

  20  alex30774 Сообщений: 748

  • 25 февраля 2020, 11:33
+
0
НО ЭТА КРАСИВАЯ КАРТИНКА КАК ВЫ СКАЗАЛИ ДЕЙСТВИТЕЛЬНО РАБОТАЕТ! А ПОЧЕМУ БЫ СОВЕТНИК НЕ ПРЕКРЕПИТЬ НЕ ПО БУФЕРАМ А К АЛЕРТУ? Я ДУМАЮ ТАК, СОВЕТНИК РАБОТАЕТ ПО СИГНАЛАМ ЦЕНЫ И ЕСЛИ ЦЕНЫ НЕ СОВПАЛИСЬ ТО СДЕЛКА НЕ СРАБОТАЛАСЬ, НЕЛЬЗЯ ЛИ ЗАПРОГРАММИРОВАТЬ СОВЕТНИКА НЕ ПО ЦЕНАМ А ПО АЛЕРТУ? ЭТО КАК БЫ РАБОТАТЬ В РУЧНУЮ, ПОЯВИЛСЯ СИГНАЛ АЛЕРТА ОТКРЫЛ СДЕЛКУ НЕ СМОТРЯ НА НЕСОВПАДЕНИИ ЦЕНЫ, ИЛИ В БУФЕРЕ СДЕЛАТЬ РАЗБРОС ЦЕНЫ ПЛЮС И МИНУС И ТОГДА Я ДУМАЮ СДЕЛКА БУДЕТ РАБОТАТЬ, У РАЗНЫХ БРОКЕРОВ РАЗНЫЕ ЦЕНЫ. ИНДИКАТОР СОЗДАВАЛСЯ НАВЕРНО ДЛЯ ОДНОГО БРОКЕРА С ДРУГИМИ ЦЕНАМИ. ИЛИ КАК ПРОПИСАТЬ БУФЕРА ЧТОБЫ СОВПАДАЛИСЬ?
Редактирован: 25 февраля 2020, 13:13
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 13:01
+
0
А вы всё таки попробуйте в ручную поработать на меньших таймфреймах графика и на реальном счёте, а там глядишь может и на платного советника заработаете и закажите себе советник по алертам.Индикатор же хороший, вы я думаю быстро с таким заработаете даже на центовом счету.
avatar

  20  alex30774 Сообщений: 748

  • 25 февраля 2020, 13:35
+
0
БОЛЬШОЕ СПАСИБО ЗА РАЗЪЯСНЕНИЕ, ЗДЕСЬ ПОХОЖЕ ПРОГРАММИСТЫ НЕ МОГУТ СПРАВИТЬСЯ С СОВЕТНИКОМ ПО АЛЕРТУ.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 15:13
+
0
Уважаемый пользователь портала, чтоб развеять компетентность программистов opentraders.ru, поясняю-
По индикатору представленному вами. Вот вам пример

Как можно увидеть из журнала индикатор сигналит алертом в 06-02, цветовое поле рисуется на бар ранее а советник выставляет ордер после закрытия бара сработки алерта.
Еще вопросы есть? Вроде подробно описал не только работу индикатора но и советника, остальные вопросы наверное уже к разработчикам индикатора.
avatar

  9  Servir Сообщений: 84

  • 25 февраля 2020, 16:23
+
0
УВАЖАЕМЫЙ СЕРВИР! Я НЕДОСТАТОЧНО ВЫЛОЖИЛ ДОКАЗАТЕЛЬСТВА СКРИНШОТАМИ? ПОЧЕМУ ТОГДА У ВАС СДЕЛКИ ОТКРЫВАЮТСЯ И ПРАВИЛЬНО РАБОТАЮТ? ЗНАЧИТ ИНДИКАТОР РАБОТАЕТ ПРАВИЛЬНО И К НЕМУ ВОПРОСОВ НЕТ И У МЕНЯ РАБОТАЕТ ИНДИКАТОР ПРЕКРАСНО, ДАВНО НАБЛЮДАЛ ЗА НИМ! У МЕНЯ ТАКОЕ ЧУВСТВО ЧТО ВЫ ДЛЯ СЕБЯ СДЕЛАЛИ СОВЕТНИК ХОРОШИЙ А НАМ КИНУЛИ КОРЯВЫЙ ДЛЯ ВСЕХ! ВЫШЕ Я СПРАШИВАЛ СКОЛЬКО СТОИТ СДЕЛАТЬ НОРМАЛЬНЫЙ СОВЕТНИК А НЕ КОРЯВЫЙ?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 16:57
+
0
ВЫ НЕ В КУРСЕ СКОЛЬКО ТАКОЙ СОВЕТНИК ПО АЛЕРТАМ БУДЕТ СТОИТЬ ЕСЛИ ЗАКАЗАТЬ? ХОТЯ БЫ ПРИМЕРНО.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 15:28
+
0
Понятия не имею.Дайте заявку на фрилансе и узнаете ориентировочную стоимость.Там и выбор програмистов большой.
avatar

  20  alex30774 Сообщений: 748

  • 25 февраля 2020, 16:23
+
0
Функция алерта не возвращает никакие значения поэтому нет данных сработала она или нет. Найдите исходный код функции алерта тогда будет можно будет делать советники по алертам. Вы станете героем.*neo* 
avatar

  8  Kudryashov Сообщений: 129

  • 26 февраля 2020, 09:12
+
0
если функция алерта есть то значит какой то код существует, не так? просветите пожалуйста.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 10:44
+
0
Код сущесьвует… Иначе эта функция не работал… Только этот код известен разработчикам mt.
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 23:29
+
0
ОТ ЧЕГО ОТКРЫВАЛИСЬ СДЕЛКИ ЕСЛИ ТАМ НЕ БЫЛО НИ ОДНОГО СИГНАЛА?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 25 февраля 2020, 00:28
+
0
тут проблема в самом индикаторе, если ставить отработку на каждом сигнале и закрытия на противоположном, то сигналы уходят в минус,
avatar

  16  cerber04 Сообщений: 409

  • 25 февраля 2020, 20:28
+
0
доброе утро! я скачал советника iCustom и прекрепил к нему индикатора, работает лучше чем здесь сделали советника, правда работает по буферам а я хотел по алерту, здесь не хотят хорошего советника делать. первый раз заказал и понял, больше не буду заказывать!
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 07:21
+
0
*fool*  Заказал бы по буферам, получил бы еще и лучше
avatar

  12  Slava78 Сообщений: 598

  • 26 февраля 2020, 08:23
+
0
здесь как раз сделали по буферам. скачай iCustom, он тоже по буферам работает но работает а этот по заказу не работает.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 08:29
+
0
извини, по программировании я совсем бум бум, если все советники создаются только по буферам то что надо сделать чтобы советник работал по индикатору? спрограммировать те буфера который дает индикатор.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 09:45
+
0
Для тех кто захочет разобраться… вот более приятный глазу вид:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int ADXbars = 14;
extern int CountBars = 350;
extern string SoundFile="Alert.wav";
extern bool UseSound=true;
bool SoundBuy = False;
bool SoundSell = False;
double gda_84[];
double gda_88[];
double gd_92;
double gd_100;
double gd_108;
double gd_116;

int init()
{
//string ls_0;
IndicatorBuffers(2);
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 108);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 108);
SetIndexBuffer(0, gda_84);
SetIndexBuffer(1, gda_88);
return (0);
}

int start()
{
if (CountBars >= Bars) CountBars = Bars;
SetIndexDrawBegin(0, Bars - CountBars);
SetIndexDrawBegin(1, Bars - CountBars);
int li_8 = IndicatorCounted();
if (li_8 < 0) return (-1);
if (li_8 < 1)
   {
   for (int li_0 = 1; li_0 <= CountBars; li_0++) gda_84[CountBars - li_0] = 0.0;
   for (li_0 = 1; li_0 <= CountBars; li_0++) gda_88[CountBars - li_0] = 0.0;
   }
for (int li_4 = CountBars; li_4 >= 0; li_4--)
   {
   gd_92 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_PLUSDI, li_4 - 1);
   gd_100 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_PLUSDI, li_4);
   gd_108 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_MINUSDI, li_4 - 1);
   gd_116 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_MINUSDI, li_4);
   if (gd_92 > gd_108 && gd_100 < gd_116) gda_84[li_4] = Low[li_4] - 5.0 * Point;
   if (gd_92 < gd_108 && gd_100 > gd_116) gda_88[li_4] = High[li_4] + 5.0 * Point;
   }
//+------------------------------------------------------------------+
if (gda_84[1] != EMPTY_VALUE && gda_84[1] != 0 && SoundBuy)
   {
   SoundBuy = False;
   if (UseSound) PlaySound (SoundFile);
   Alert("SixtySecondTrades(", Symbol(), ", ", Period(), ") — BUY!!!");
   }
if (!SoundBuy && (gda_84[1] == EMPTY_VALUE || gda_84[1] == 0)) SoundBuy = True;
if (gda_88[1] != EMPTY_VALUE && gda_88[1] != 0 && SoundSell)
   {
   SoundSell = False;
   if (UseSound) PlaySound (SoundFile);
   Alert("SixtySecondTrades (", Symbol(), ", ", Period(), ") — SELL!!!");
   }
if (!SoundSell && (gda_88[1] == EMPTY_VALUE || gda_88[1] == 0)) SoundSell = True;
//+------------------------------------------------------------------+
return (0);
} 
avatar

  8  Kudryashov Сообщений: 129

  • 26 февраля 2020, 09:37
+
0
может и советника по нему сделаете?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 10:00
+
0
*think*  *think*  *think* 

Возможно… Давно хотел попробовать поработать с функцией iCustom…

*think*  *think*  *think* 

avatar

  8  Kudryashov Сообщений: 129

  • 26 февраля 2020, 10:12
+
0
а что вы изменили в индикаторе?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 10:40
+
+1
Ничего… хотя изменить следовало бы… ибо читать всякие li_8, li_0, gda_84 и прочее для меня лично просто овлптлуктпдтрлваоип...*loss* 
avatar

  8  Kudryashov Сообщений: 129

  • 26 февраля 2020, 11:17
+
0
+ к уже сказанному… не плохо бы переписать его под свежую версию MT4… вопрос в другом будет ли он тогда также эффективно работать*think* 
avatar

  8  Kudryashov Сообщений: 129

  • 26 февраля 2020, 11:19
+
0
попробуй
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 12:51
+
+1
Попробовал, оказалось не так то он и требовал переписки. Однако мне как любителя свежачка приятненько :3, а вам как знатока этого индикатора прошу сравнить с вашей версией у меня Mt4 билд 1262.

//+------------------------------------------------------------------+
//|                                            SixtySecondTrades.mq4 |
//|                              Copyright 2020, Dmitriy Kudryashov. |
//|                       https://www.mql5.com/ru/users/dlim0n4ik.dk |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Dmitriy Kudryashov."
#property link      "https://www.mql5.com/ru/users/dlim0n4ik.dk"
#property version   "200.226"
#property strict

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red


//+------------------------------------------------------------------+
//|   Блок вводимых параметров                                       |
//+------------------------------------------------------------------+
extern int ADXbars = 14;            //Период ADX
extern int CountBars = 350;         //Количество баров для отрисовки
extern string SoundFile="Alert.wav";//Файл звука оповещений (Alerts)
extern bool UseSound=true;          //Использовыать звуковое оповещения
bool SoundBuy = false;
bool SoundSell = false;
double up_buffer[];
double down_buffer[];
double adx_plusdi_1;
double adx_plusdi_0;
double adx_minusdi_1;
double adx_minusdi_0;
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция инициализации программы                                |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
IndicatorBuffers(2);
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 108);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 108);
SetIndexBuffer(0, up_buffer);
SetIndexBuffer(1, down_buffer);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция деинициализации программы                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--------------------------------------------------------------------
//ObjectDelete("info_copyright");
//--------------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,       // Размер входных таймсерий
                const int prev_calculated,   // Обработано баров на предыдущем вызове
                const datetime &time[],      // Time
                const double &open[],        // Open
                const double &high[],        // High
                const double &low[],         // Low
                const double &close[],       // Close
                const long &tick_volume[],   // Tick volume
                const long &volume[],        // Real volume
                const int &spread[]          // Spread
                )
{
//
//string com;
//com += rates_total + "\n";
//com += prev_calculated + "\n";
//com += Bars + "\n";
//com += IndicatorCounted() + "\n";
//Comment(com);
//--------------------------------------------------------------------
//if(Bars <= 100)     // Проверим количества баров для расчётов
//   {
//   Print("There are not enough bars in history to calculate.");
//   return (rates_total);    
//   }
//--------------------------------------------------------------------
if (CountBars >= Bars) CountBars = Bars;
SetIndexDrawBegin(0, Bars - CountBars);
SetIndexDrawBegin(1, Bars - CountBars);
//--------------------------------------------------------------------
int ExtCountedBars = IndicatorCounted();  // Получим количества уже посчитанных баров
if(ExtCountedBars < 0) return (-1);       // Проверим на возможные ошибки в подсчетах
//--------------------------------------------------------------------
if (ExtCountedBars < 1)
   {
   for (int clear_bars = 1; clear_bars <= CountBars; clear_bars++)
      {
      up_buffer[CountBars - clear_bars] = 0.0;
      down_buffer[CountBars - clear_bars] = 0.0;
      }
   //for (int clear_bars = 1; clear_bars <= CountBars; clear_bars++) down_buffer[CountBars - clear_bars] = 0.0;
   }
//--------------------------------------------------------------------
for (int index = CountBars; index >= 0; index--)
   {
   //--- Расчет индикатора ADX на текущем баре
   adx_plusdi_0 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_PLUSDI, index);
   adx_minusdi_0 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_MINUSDI, index);
   //--- Расчет индикатора ADX на предыдущем баре
   adx_plusdi_1 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_PLUSDI, index - 1);
   adx_minusdi_1 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_MINUSDI, index - 1);
   //--- Условие для стрелки вверх
   if (adx_plusdi_1 > adx_minusdi_1 && adx_plusdi_0 < adx_minusdi_0)
      {
      up_buffer[index] = Low[index] - 5.0 * Point; // Нарисуем стрелку вверх под ценой Low
      }
   //--- Условие для стрелки вниз
   if (adx_plusdi_1 < adx_minusdi_1 && adx_plusdi_0 > adx_minusdi_0)
      {
      down_buffer[index] = High[index] + 5.0 * Point; // Нарисуем стрелку вверх под ценой High
      }
   }
//--------------------------------------------------------------------
//--- Условие для срабатывания оповещения на ПОКУПКУ -----------------
if (up_buffer[1] != EMPTY_VALUE && up_buffer[1] != 0 && SoundBuy) // Если буфер ВВЕРХ не пустой и не имеет значение 0 и звук покупки ИСТИНА
   {
   SoundBuy = false; //Звук на покупку ЛОЖНО (Оповещение сработало)
   if (UseSound) PlaySound (SoundFile);   // Выполнить проигрование звукового файла оповещения
   Alert("SixtySecondTrades(", Symbol(), ", ", Period(), ") — BUY!!!"); // Сообщение оповещения
   }
if (!SoundBuy && (up_buffer[1] == EMPTY_VALUE || up_buffer[1] == 0)) SoundBuy = true; //
//--------------------------------------------------------------------
//--- Условие для срабатывания оповещения на ПРОДАЖУ -----------------
if (down_buffer[1] != EMPTY_VALUE && down_buffer[1] != 0 && SoundSell)// Если буфер ВНИЗ не пустой и не имеет значение 0 и звук продажу ИСТИНА
   {
   SoundSell = false;//Звук на продажу ЛОЖНО (Оповещение сработало)
   if (UseSound) PlaySound (SoundFile);   // Выполнить проигрование звукового файла оповещения
   Alert("SixtySecondTrades (", Symbol(), ", ", Period(), ") — SELL!!!");// Сообщение оповещения
   }
if (!SoundSell && (down_buffer[1] == EMPTY_VALUE || down_buffer[1] == 0)) SoundSell = true;//
//--------------------------------------------------------------------
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 09:26
+
0
я что то не заметил разницу, что вы сделали? я просто переписал индикатор на ваш.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 11:04
+
+1
Лучше бы еще 1 создали и вместе сравнили… может один раньше другой позже *uptrend* 
Я думал что там есть что переписать… но оказалось кроме замене главной вункции start на OnCalculate. start — это функция в основном в скриптах. OnCalculate — функция в индикаторных. В общем согласно инструкции. Также объединил 2 цикла в 1. Ибо считает 2 раза одно и тоже… нелогичненько.
Вот ваш оригинальный… для удобства в сообщении он будет помечен как OLD

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int ADXbars = 14;
extern int CountBars = 350;
extern string SoundFile="Alert.wav";
extern bool UseSound=true;
bool SoundBuy = False;
bool SoundSell = False;
double gda_84[];
double gda_88[];
double gd_92;
double gd_100;
double gd_108;
double gd_116;

int init()
{
//string ls_0;
IndicatorBuffers(2);
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 108);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 108);
SetIndexBuffer(0, gda_84);
SetIndexBuffer(1, gda_88);
return (0);
}

int start()
{
if (CountBars >= Bars) CountBars = Bars;
SetIndexDrawBegin(0, Bars - CountBars);
SetIndexDrawBegin(1, Bars - CountBars);
int li_8 = IndicatorCounted();
if (li_8 < 0) return (-1);
if (li_8 < 1)
   {
   for (int li_0 = 1; li_0 <= CountBars; li_0++) gda_84[CountBars - li_0] = 0.0;
   for (li_0 = 1; li_0 <= CountBars; li_0++) gda_88[CountBars - li_0] = 0.0;
   }
for (int li_4 = CountBars; li_4 >= 0; li_4--)
   {
   gd_92 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_PLUSDI, li_4 - 1);
   gd_100 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_PLUSDI, li_4);
   gd_108 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_MINUSDI, li_4 - 1);
   gd_116 = iADX(NULL, 0, ADXbars, PRICE_CLOSE, MODE_MINUSDI, li_4);
   if (gd_92 > gd_108 && gd_100 < gd_116) gda_84[li_4] = Low[li_4] - 5.0 * Point;
   if (gd_92 < gd_108 && gd_100 > gd_116) gda_88[li_4] = High[li_4] + 5.0 * Point;
   }
//+------------------------------------------------------------------+
if (gda_84[1] != EMPTY_VALUE && gda_84[1] != 0 && SoundBuy)
   {
   SoundBuy = False;
   if (UseSound) PlaySound (SoundFile);
   Alert("OLD-SixtySecondTrades(", Symbol(), ", ", Period(), ") — BUY!!!");
   }
if (!SoundBuy && (gda_84[1] == EMPTY_VALUE || gda_84[1] == 0)) SoundBuy = True;
if (gda_88[1] != EMPTY_VALUE && gda_88[1] != 0 && SoundSell)
   {
   SoundSell = False;
   if (UseSound) PlaySound (SoundFile);
   Alert("OLD-SixtySecondTrades (", Symbol(), ", ", Period(), ") — SELL!!!");
   }
if (!SoundSell && (gda_88[1] == EMPTY_VALUE || gda_88[1] == 0)) SoundSell = True;
//+------------------------------------------------------------------+
return (0);
} 

avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 11:18
+
0
а вот на счет советника… через функцию iCustom…
в данном индикаторе она не может рассчитать на текущем баре, а на следующем баре условие уже меняется и советник их не замечает.
Так что в данной ситуации правильнее было написать советник и вставить в него условия которые в индикаторе, НО… :D 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 11:25
+
0
Откройте глаза и посмотрите внимательней на ваш индикатор — это же обычное пересечение линий стандартного ADX. Если писать советник а он написан по сигналам Вашего индикатора( повторюсь цветовые сигналы на графике выставляются на Bar[1] т.к. проверка сигнала осуществляется на текущем баре но ПРЕДЫДУЩЕГО) то ордера будут выставляться на бар позже алерта, но можно написать или найти бесплатный советник, коих много на просторах инета, работающий от пересечений линий ADX
avatar

  9  Servir Сообщений: 84

  • 26 февраля 2020, 18:20
+
0
я так же могу сказать, откройте глаза и посмотрите на мои скриншоты, там ясно видно что советник получил сигнал но сделку не открыл, это как понимать? а на вашем скриншоте видно что советник работает безупречно. если этот индикатор на стандартном ADX и вы не смогли сделать простой советник который следует по алертам. я искал советник на ADX но они работают не так как этот индикатор!
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 26 февраля 2020, 21:06
+
0
Я уже писал… СОВЕТНИК НЕ МОЖЕТ РАБОТАТЬ ПО АЛЕРТАМ!!! У этой функции нет возвращаемого значения… поэтому нет возможности проверить сработал алерт или нет.*wall* 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 09:29
+
0
а по звуковому сигналу можно что нибудь сделать? например: по алерту сделку сам открыл в ручную а дальше звуковой сигнал пришел сделка поменялась и так далее.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 11:08
+
0
*???* 
с функцией PlaySound я еще не работал…
*think* 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 11:29
+
0
попробуйте сделать советник по звуку с первой сделкой в ручную, тогда наверно прийдется держать одну пару на терминале, ведь так?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 11:45
+
0
а объединить советник и индикатор нельзя? чтобы индикатор был в советнике и советник сам стрелки выставлял.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 12:45
+
0
*think* 
не то что это будет объединение… и стрелки я хз… но в таком случае он будет всего 2 сделки за 2019 год открывать.:D 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 13:52
+
0
о-о, я связался с человеком из прошлого года??? хорошо было бы с человеком из будущего года связаться!
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 14:19
+
0
у меня нет данных будущего года…
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 14:33
+
0
Надеюсь вы знаете как создать шаблон советника и как там заменять алгоритм!?*wizard* 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 16:58
+
0
совсем не знаю, я даже не знал что советники пишутся только по буферам и не писал бы здесь только глупостей.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 20:32
+
0
По буферам пишутся только советники по индикаторам.
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 22:27
+
0
в этом топике я узнал что советники по сигналам алерта не ловятся, а как по звуковым сигналам?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 22:38
+
0
Походу тоже… Но решение я вроде нашел...*wall* 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 22:56
+
0
Пример не нащел(  так что придется словами…
Если у вас есть индикатор оптимизированый… Вы можете его вогнать в советник через функцию iCustom… Она берет данные из буферов вашего индикатора и передает их советнику для анализа… Однако, это хорошо подходит для индикаторов которые строят графики, а для стрелочного индикаторов она… Скажем так: не очень подходит.
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 22:37
+
0
а мой индикатор не оптимизированный?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 22:41
+
0
Оптимизирован, но не расчитан для функции iCostom…
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 22:45
+
0
В вашем индикаторе реализована распространенная стратегия… По пересечению ADX



//+------------------------------------------------------------------+
//|                                            SixtySecondTrades.mq4 |
//|                              Copyright 2020, Dmitriy Kudryashov. |
//|                       https://www.mql5.com/ru/users/dlim0n4ik.dk |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Dmitriy Kudryashov."
#property link      "https://www.mql5.com/ru/users/dlim0n4ik.dk"
#property version   "200.226"
#property strict

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red


//+------------------------------------------------------------------+
//|   Блок вводимых параметров                                       |
//+------------------------------------------------------------------+
extern int ADXbars = 14;            //Период ADX
extern int CountBars = 350;         //Количество баров для отрисовки
extern string SoundFile="Alert.wav";//Файл звука оповещений (Alerts)
extern bool UseSound=true;          //Использовыать звуковое оповещения
bool SoundBuy = false;
bool SoundSell = false;
double up_buffer[];
double down_buffer[];
double adx_plusdi_1;
double adx_plusdi_0;
double adx_minusdi_1;
double adx_minusdi_0;
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция инициализации программы                                |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
IndicatorBuffers(2);
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 108);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 108);
SetIndexBuffer(0, up_buffer);
SetIndexBuffer(1, down_buffer);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция деинициализации программы                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--------------------------------------------------------------------
//ObjectDelete("info_copyright");
//--------------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,       // Размер входных таймсерий
                const int prev_calculated,   // Обработано баров на предыдущем вызове
                const datetime &time[],      // Time
                const double &open[],        // Open
                const double &high[],        // High
                const double &low[],         // Low
                const double &close[],       // Close
                const long &tick_volume[],   // Tick volume
                const long &volume[],        // Real volume
                const int &spread[]          // Spread
                )
{
//
//string com;
//com += rates_total + "\n";
//com += prev_calculated + "\n";
//com += Bars + "\n";
//com += IndicatorCounted() + "\n";
//Comment(com);
//--------------------------------------------------------------------
//if(Bars <= 100)     // Проверим количества баров для расчётов
//   {
//   Print("There are not enough bars in history to calculate.");
//   return (rates_total);    
//   }
//--------------------------------------------------------------------
if (CountBars >= Bars) CountBars = Bars;
SetIndexDrawBegin(0, Bars - CountBars);
SetIndexDrawBegin(1, Bars - CountBars);
//--------------------------------------------------------------------
int ExtCountedBars = IndicatorCounted();  // Получим количества уже посчитанных баров
if(ExtCountedBars < 0) return (-1);       // Проверим на возможные ошибки в подсчетах
//--------------------------------------------------------------------
if (ExtCountedBars < 1)
   {
   for (int clear_bars = 1; clear_bars <= CountBars; clear_bars++)
      {
      up_buffer[CountBars - clear_bars] = 0.0;
      down_buffer[CountBars - clear_bars] = 0.0;
      }
   //for (int clear_bars = 1; clear_bars <= CountBars; clear_bars++) down_buffer[CountBars - clear_bars] = 0.0;
   }
//--------------------------------------------------------------------
for (int index = CountBars; index >= 0; index--)
   {
   //--- Расчет индикатора ADX на текущем баре
   adx_plusdi_0 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_PLUSDI, index);
   adx_minusdi_0 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_MINUSDI, index);
   //--- Расчет индикатора ADX на предыдущем баре
   adx_plusdi_1 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_PLUSDI, index - 1);
   adx_minusdi_1 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_MINUSDI, index - 1);
   //--- Условие для стрелки вверх
   if (adx_plusdi_1 > adx_minusdi_1 && adx_plusdi_0 < adx_minusdi_0)
      {
      up_buffer[index] = Low[index] - 5.0 * Point; // Нарисуем стрелку вверх под ценой Low
      }
   //--- Условие для стрелки вниз
   if (adx_plusdi_1 < adx_minusdi_1 && adx_plusdi_0 > adx_minusdi_0)
      {
      down_buffer[index] = High[index] + 5.0 * Point; // Нарисуем стрелку вверх под ценой High
      }

avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 22:50
+
0
Блин… С мобилу неудобненько коды писать =.=
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 22:54
+
0
Но в стрелочных индикаторах есть условия по которым выставляются. Если вы знаете какое условия для выставления той или иной стрелки вы можете без всякого индикатора воплотить это условие в советнике.
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 22:42
+
0
м-да, тут нужен хороший программист, чтобы найти эти условия.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 23:05
+
0
Нет. Условия простые когда +DI > -DI на предредыдущем быре и +DI < -DI на текущем баре то покупка.
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 23:15
+
0
когда +DI < -DI на предредыдущем быре и +DI > -DI на текущем баре то продажа
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 23:16
+
+2
Фииигга себе…
Не ожидал.
Я аж зачитался.
За какую-то недельку в топике почти Санта-Барбара.
avatar

  24  ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 27 февраля 2020, 18:00
+
0
ну как интересно? это я такой болтливый! взял бы идею подал, может быть что исправить надо.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 21:31
+
0
Наверно самый обсуждаемый заказ:D 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 23:33
+
0
да нет, они наверно там все ржут от меня.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 27 февраля 2020, 23:36
+
0
:D  :D  :D 
Да я сам ржу пол дня… Над решением которое я придумал:D 
Ощущение что я изнасиловал mql таким примитивом *haha* 
avatar

  8  Kudryashov Сообщений: 129

  • 27 февраля 2020, 23:47
+
0
Не, я в код даже не вчитывался, это как раз не очень интересно.
Сами диалоги забавные, местами даже не вполне понятно, кто кому мозг гребёт:) 
Редактирован: 28 февраля 2020, 01:44
avatar

  24  ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 28 февраля 2020, 00:51
+
0
Впрочем, может я чего не так понял…
avatar

  24  ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 28 февраля 2020, 00:53
+
+2
Значит так… Представленные ниже индикатор и советник должны быть помещены на один график. Индикатор создает линию, а советник ее анализирует и открывает соответствующую позицию. В общем… Я Дима и я извращенец!*haha* 
avatar

  8  Kudryashov Сообщений: 129

  • 28 февраля 2020, 08:53
+
+1
1. Индикатор:

//+------------------------------------------------------------------+
//|                                            SixtySecondTrades.mq4 |
//|                              Copyright 2020, Dmitriy Kudryashov. |
//|                       https://www.mql5.com/ru/users/dlim0n4ik.dk |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Dmitriy Kudryashov."
#property link      "https://www.mql5.com/ru/users/dlim0n4ik.dk"
#property version   "200.227"
#property strict

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red


//+------------------------------------------------------------------+
//|   Блок вводимых параметров                                       |
//+------------------------------------------------------------------+
extern int ADXbars = 14;            //Период ADX
extern int CountBars = 350;         //Количество баров для отрисовки
extern string SoundFile="Alert.wav";//Файл звука оповещений (Alerts)
extern bool UseSound=true;          //Использовыать звуковое оповещения
bool SoundBuy = false;
bool SoundSell = false;
double up_buffer[];
double down_buffer[];
double adx_plusdi_1;
double adx_plusdi_0;
double adx_minusdi_1;
double adx_minusdi_0;
int trigger = 0;
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция инициализации программы                                |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
IndicatorBuffers(2);
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 108);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 108);
SetIndexBuffer(0, up_buffer);
SetIndexBuffer(1, down_buffer);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция деинициализации программы                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--------------------------------------------------------------------
//ObjectDelete("info_copyright");
//--------------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,       // Размер входных таймсерий
                const int prev_calculated,   // Обработано баров на предыдущем вызове
                const datetime &time[],      // Time
                const double &open[],        // Open
                const double &high[],        // High
                const double &low[],         // Low
                const double &close[],       // Close
                const long &tick_volume[],   // Tick volume
                const long &volume[],        // Real volume
                const int &spread[]          // Spread
                )
{
//
//string com;
//com += rates_total + "\n";
//com += prev_calculated + "\n";
//com += Bars + "\n";
//com += IndicatorCounted() + "\n";
//Comment(com);
//--------------------------------------------------------------------
//if(Bars <= 100)     // Проверим количества баров для расчётов
//   {
//   Print("There are not enough bars in history to calculate.");
//   return (rates_total);    
//   }
//--------------------------------------------------------------------
if (CountBars >= Bars) CountBars = Bars;
SetIndexDrawBegin(0, Bars - CountBars);
SetIndexDrawBegin(1, Bars - CountBars);
//--------------------------------------------------------------------
int ExtCountedBars = IndicatorCounted();  // Получим количества уже посчитанных баров
if(ExtCountedBars < 0) return (-1);       // Проверим на возможные ошибки в подсчетах
//--------------------------------------------------------------------
if (ExtCountedBars < 1)
   {
   for (int clear_bars = 1; clear_bars <= CountBars; clear_bars++)
      {
      up_buffer[CountBars - clear_bars] = 0.0;
      down_buffer[CountBars - clear_bars] = 0.0;
      }
   //for (int clear_bars = 1; clear_bars <= CountBars; clear_bars++) down_buffer[CountBars - clear_bars] = 0.0;
   }
//--------------------------------------------------------------------
for (int index = CountBars; index >= 0; index--)
   {
   //--- Расчет индикатора ADX на текущем баре
   adx_plusdi_0 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_PLUSDI, index);
   adx_minusdi_0 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_MINUSDI, index);
   //--- Расчет индикатора ADX на предыдущем баре
   adx_plusdi_1 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_PLUSDI, index - 1);
   adx_minusdi_1 = iADX(Symbol(),PERIOD_CURRENT, ADXbars, PRICE_CLOSE, MODE_MINUSDI, index - 1);
   //--- Условие для стрелки вверх
   if (adx_plusdi_1 > adx_minusdi_1 && adx_plusdi_0 < adx_minusdi_0)
      {
      up_buffer[index] = Low[index] - 5.0 * Point; // Нарисуем стрелку вверх под ценой Low
      if (trigger != 1)
         {
         ObjectDelete(0,"SELL");
         trigger = 1;
         HLine("BUY",up_buffer[index],clrGreen);
         }
      }
   //--- Условие для стрелки вниз
   if (adx_plusdi_1 < adx_minusdi_1 && adx_plusdi_0 > adx_minusdi_0)
      {
      down_buffer[index] = High[index] + 5.0 * Point; // Нарисуем стрелку вверх под ценой High
      if (trigger != 2)
         {
         ObjectDelete(0,"BUY");
         trigger = 2;
         HLine("SELL",down_buffer[index],clrRed);
         }
      }
   }
//--------------------------------------------------------------------
//--- Условие для срабатывания оповещения на ПОКУПКУ -----------------
if (up_buffer[1] != EMPTY_VALUE && up_buffer[1] != 0 && SoundBuy) // Если буфер ВВЕРХ не пустой и не имеет значение 0 и звук покупки ИСТИНА
   {
   SoundBuy = false; //Звук на покупку ЛОЖНО (Оповещение сработало)
   if (UseSound) PlaySound (SoundFile);   // Выполнить проигрование звукового файла оповещения
   Alert("Sixty_Second_Trades(", Symbol(), ", ", Period(), ") — BUY!!!"); // Сообщение оповещения
   
   }
if (!SoundBuy && (up_buffer[1] == EMPTY_VALUE || up_buffer[1] == 0)) SoundBuy = true; //
//--------------------------------------------------------------------
//--- Условие для срабатывания оповещения на ПРОДАЖУ -----------------
if (down_buffer[1] != EMPTY_VALUE && down_buffer[1] != 0 && SoundSell)// Если буфер ВНИЗ не пустой и не имеет значение 0 и звук продажу ИСТИНА
   {
   SoundSell = false;//Звук на продажу ЛОЖНО (Оповещение сработало)
   if (UseSound) PlaySound (SoundFile);   // Выполнить проигрование звукового файла оповещения
   Alert("Sixty_Second_Trades (", Symbol(), ", ", Period(), ") — SELL!!!");// Сообщение оповещения
   }
if (!SoundSell && (down_buffer[1] == EMPTY_VALUE || down_buffer[1] == 0)) SoundSell = true;//
//--------------------------------------------------------------------
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция сощдание линии цены                                    |
//+------------------------------------------------------------------+
void HLine(string name, //Имя линии
           double price,//Цена
           color col    //Цвет линии
           )
{
if(ObjectFind(0,name)==-1)
   {
   ObjectCreate(0,name,OBJ_HLINE,0,0,price);
   ObjectSetInteger(0,name,OBJPROP_COLOR,col);
   }
else
   {
   ObjectMove(0,name,0,0,price);
   ObjectSetInteger(0,name,OBJPROP_COLOR,col);
   }
}
//+------------------------------------------------------------------+
avatar

  8  Kudryashov Сообщений: 129

  • 28 февраля 2020, 08:53
+
+3
2. Советник:

//+------------------------------------------------------------------+
//|                                           Line_Open_Position.mq4 |
//|                              Copyright 2020, Dmitriy Kudryashov. |
//|                       https://www.mql5.com/ru/users/dlim0n4ik.dk |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Dmitriy Kudryashov."
#property link      "https://www.mql5.com/ru/users/dlim0n4ik.dk"
#property version   "200.227"
#property strict
#define MAGIC 7710067
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else                                    CheckForClose();
if(Volume[0] > 1) return;
else Print("Функция OnTick() - РАБОТАЕТ!");
//CheckForOpen();
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int position = 0;
int buys=0,sells=0;
//---
for(int i=0;i<OrdersTotal();i++)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
      {
      if(OrderType()==OP_BUY || OrderType()==OP_SELL) position++;
      }
   }
//--- return orders volume
return(position);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double line_price;
//--- go trading only for first tiks of new bar
//if(Volume[0] > 1) return;
//Print("Функция CheckForOpen() - РАБОТАЕТ!" + ObjectsTotal());
for(int index = ObjectsTotal()-1; index >= 0; index--)
   {
   //Print("CheckForOpen() - Количество объектов на графике: " + ObjectsTotal());
   if (ObjectType(ObjectName(index))== OBJ_HLINE)
      {
      line_price=NormalizeDouble(ObjectGet(ObjectName(index),OBJPROP_PRICE1),Digits);
      Print("CheckForOpen() - Найден объект: ЛИНИЯ ЦЕНЫ(" + ObjectName(index)+") = " + DoubleToStr(line_price,Digits));
      if (ObjectName(index) == "BUY" && line_price < Bid)
         {
         int ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"",MAGIC,0,clrGreen);
         if (ticket > 0) Print("CheckForOpen() - Открыта позиция OP_BUY с номером:" + StringConcatenate(ticket));
         }
      if (ObjectName(index) == "SELL" && line_price > Bid)
         {
         int ticket = OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"",MAGIC,0,clrRed);
         if (ticket > 0) Print("CheckForOpen() - Открыта позиция OP_SELL с номером:" + StringConcatenate(ticket));
         }
      }
   }
//Comment(com);
ChartRedraw();// Вызывим принудительную перерисовку графика
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
{
//--- go trading only for first tiks of new bar
//if(Volume[0]>1) return;
//---
double line_price;
int ticket;
for(int index = ObjectsTotal()-1; index >= 0; index--)
   {
   //Print("CheckForClose() - Количество объектов на графике: " + ObjectsTotal());
   if (ObjectType(ObjectName(index))==OBJ_HLINE)
      {
      line_price=NormalizeDouble(ObjectGet(ObjectName(index),OBJPROP_PRICE1),Digits);
      Print("CheckForClose() - Найден объект: ЛИНИЯ ЦЕНЫ(" + ObjectName(index)+") = " + DoubleToStr(line_price,Digits));
      for(int position = 0; position < OrdersTotal(); position++)
         {
         if(OrderSelect(position,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         ticket = OrderTicket();
         Print("CheckForClose() - Найдена открытая позиця, номер: " + StringConcatenate(ticket));
         if(OrderType()==OP_BUY)
            {
            if(ObjectName(index) == "SELL" && line_price > Bid)
               {
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("CheckForClose() - Ошибка закрытия позиции, номер: " + StringConcatenate(ticket) + ". Ошибка:",GetLastError());
               }
            break;
            }
         if(OrderType() == OP_SELL)
            {
            if(ObjectName(index) == "BUY" && line_price < Bid)
               {
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("CheckForClose() - Ошибка закрытия позиции, номер: " + StringConcatenate(ticket) + ". Ошибка:",GetLastError());
               }
            break;
            }
         }
      }
   }
ChartRedraw();// Вызывим принудительную перерисовку графика
//---
}
//+------------------------------------------------------------------+
avatar

  8  Kudryashov Сообщений: 129

  • 28 февраля 2020, 08:54
+
+1
Почему извращенец? Абсолютно нормальное решение.
Да, программисту в нормальном случае лучше работать с индикатором, который возвращает свои значения, но, во-первых очень часто встречаются и такие индикторы, которые не возвращают свои значения в буфер, а просто рисуют объекты на графике, а во-вторых может попасться индикатор без исходника и тут тоже только такой метод прокатит.
avatar

  24  ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 28 февраля 2020, 09:23
+
0
*think*  *think*  *think* 
И не поспоришь8-) 
Аригато!!!*hi* 
avatar

  8  Kudryashov Сообщений: 129

  • 28 февраля 2020, 10:50
+
0
вот теперь работает точно по алерту! браво, вы гений! не могли бы вы поставить параметры в советнике а то я тот советник стер и скопировал ваш а параметров нет, было бы супер если вы поставили бы автоматический стоплосс и открытие несколько сделок с шагом по затяжному тренду типа стоповых ордеров со стоплоссом на последней сделке и закрытием всех сделок или как поменяется сигнал.
Редактирован: 28 февраля 2020, 12:57
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 28 февраля 2020, 11:59
+
0
вы хоть представляете сколько это кода этой красивой фразе
" открытие несколько сделок с шагом по затяжному тренду типа стоповых ордеров со стоплоссом на последней сделке" чтоб обьяснить это машине *crazy* 
avatar

  16  cerber04 Сообщений: 409

  • 28 февраля 2020, 16:50
+
0
такие есть советники, если не сделают то попробую обьединить их.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 28 февраля 2020, 17:18
+
0
Я бы порекомендовал Вам более внятно излагать свои мысли.
Это у Вас в голове сложившаяся картинка, а программист — не экстрасенс, он из чужой головы сам ничего не достанет.
Он возьмёт и сделает так, как ОН понял.
Вот после этого и рождаются обидки.
Учитесь писать техзадание и учтите, что скрины с пометками увеличивают понятность ТЗ как минимум вдвое.
Редактирован: 28 февраля 2020, 18:02
avatar

  24  ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 28 февраля 2020, 18:01
+
0
а вы хотя бы поняли мои мысли?
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 28 февраля 2020, 22:05
+
0
доброе утро дмитрий! вы не могли бы сделать чтобы эта линия сигнала продержалась к примеру секунда или две для того чтобы открылась сделка и дальше линия выключилась до появления следующего сигнала, дело в том что когда я хочу закрыть сделку а не получается, я закрываю сделку а сделка опять открывается на старом сигнале, даже стоплосс установить не получится.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 29 февраля 2020, 08:02
+
0
дима, у меня идея, а что если установить в параметрах время обработки сигнала, например, я установил в параметрах 5 секунд и в течении этого времени сигнал считается как новый, после 5 секунд считается как старый и больше не обрабатывается, и стоплосс будет работать и трал можно поставить и на флетах очень выгодно. только я не знаю где лучше установить время обработки сигнала, в индикаторе или в советнике.
Редактирован: 29 февраля 2020, 09:10
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 29 февраля 2020, 09:09
+
0
Есть лишь один нюанс. При таком раскладе не будет советник работать на VPS.
Работать будет только при запуске терминала на компе.
avatar

  24  ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 11 июня 2020, 19:14
+
0
VPS и не нужен, утром встал включил и перед сном выключил.
avatar

  9  IGOR1367 Автор Сообщений: 108

  • 11 июня 2020, 20:17
+
0

до гения мне далековато… я говорил что это хобби… это я изучаю в свободное время… то что получилось одно не значит что получиться другое… однако я посмотрю что можно сделать, но сильно не надейтесь!
П.С.долго отвечал из за того что срисовывал*crazy* 
avatar

  8  Kudryashov Сообщений: 129

  • 1 марта 2020, 20:58

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