Предложения по автоматизации торговли

krampe21

Новичок форума
Советник по Улучшенному Параболику.

Изменения (помимо замены блока настроек индикатора):

- добавлена настройка "Пирамидинг/усреднение". Она имеет три варианта - "Каждый бар" (безусловное открытие новой позиции на открытии нового бара в рамках заданного настройкой "Максимальное кол-во открытых позиций" предела), "Лучшая цена" (то же самое, но только если текущая цена открытия лучше, чем цена открытия наилучшей по цене открытой или закрытой позиции серии (новая серия начинается после смены показания Параболика)), "По АС" (п. 1, но только если терминальный индикатор AC показывает нарастание тенденции в нашу сторону в виде двух растущих или падающих столбцов гистограммы);

- настройка "Максимальное кол-во открытых позиций" теперь может принимать значение 0, означающее автоматическое определение советником этого количества в каждом конкретном моменте в зависимости от волатильности цены при помощи индикатора ATR. Общий принцип: чем волатильность выше, тем больше значение, чем ниже - тем меньше. При этом, если текущее значение этого параметра, полученное советником, ниже, чем уже имеющееся количество открытых позиций, полученных при прежних бОльших значениях, то "лишние" позиции принудительно не закрываются.
Здравствуйте Иван!

Хочу поделиться интересным индикатором (присоединил), который может быть основой хорошего советника. Сигналы качественные, не перерисовывается. Стратегия - торговля отложенными STOP ордерами.

Если этот индикатор вдохновит Вас написать на нем советник, то Алгоритм такой:

При движении цены, опережая ее появляются горизонтальные пунктирные линии индикатора голубого и коричневого цвета.

1. Если цена сравнялась с любой из этих линий, выставляется два отложенных ордера BUY STOP и SELL STOP на расстоянии N пунктов (N задается в настройках советника) выше и ниже этой пунктирной линии.

2. Если цена пошла вверх, срабатывает BUY STOP (открывается покупка). Закрытие - цена сравнялась с более высокой голубой пунктирной линией. В этом случае сделка прибыльная.

3. Если цена пошла вниз, срабатывает SELL STOP (открывается продажа). Закрытие - цена сравнялась с более низкой коричневой пунктирной линией. В этом случае сделка прибыльная.

4. Одновременно с закрытием ордеров по данной схеме, сразу выставляются два новых отложенных ордера как в п.1, и цикл (п.1, 2, 3) повторяется.

5. Если цена не дойдя до очередной пунктирной линии к которой стремилась, разворачивается и движется в обратную сторону, ордер закрывается с убытком, когда она сравняется с противоположной пунктирной линией.

6. После убыточной сделки, торгуемый объем (лот) увеличивается в Р раз (значение Р задается в настройках советника.

7. Одновременно с закрытием убыточного ордера, сразу выставляются два новых отложенных ордера как в п.1, и цикл повторяется.

В настройках советника желательна возможность менять параметры индикатора: 1) angle_up ;
2) angle_dn ; 3) ExtDepth.
В настройках советника желательна возможность задания: 1) торгуемый лот; 2) Тейк Профит и Стоп Лосс; 3) значения N и P (см. п.1 и п.6).

Если Вы Иван запустите индикатор в тестере - будет понятно и наглядно видно, как должен работать советник в соответствии с описанным Алгоритмом.

Надеюсь, что данный индикатор будет Вам интересен и полезен.

Хорошего дня и творческих успехов.
 

Вложения

  • Gann_SQ9_A.ex4
    15,6 КБ · Просмотры: 36

Genry_05

Отдыхает

Вложения

  • Gann_SQ9_A.mq4
    27,4 КБ · Просмотры: 45

el_Venso

Активный участник
Всем привет.
Давно вынашиваю такую мыслю…
Рассмотрим график Ренко – это кирпичи, появляющиеся через определённое кол-во пройденных пунктов.
А возможно ли его апгрейдить – добавить функцию времени ?
То есть – что произойдёт быстрее – либо пройденное кол-во пунктов, либо время 5-15-30 минут – и от этого рисуется новый кирпич.
К примеру – цена прошла 10п – рисуется новый кирпич, при этом временной цикл обнуляется.
Если время 15 минут прошло быстрее, чем цена прошла 10п. – рисуется новый кирпич, при этом Ренко цикл обнуляется.
И так по кругу ….

Настройки Ренко – размер кирпича + процент для следующего (RevSize)
Настройки времени – было-бы классно указать любое время.

Возможно ли создать сие творение ?

В приложении - как вариант для творения.
 

Вложения

  • RangeBarsLiveCharts_EA_v4.13.mq4
    21,1 КБ · Просмотры: 7

michaetom97

Новичок форума
Ребят, у меня такой индикатор, есть 3 ошибки, исправьте пожалуйста
photo_2024-06-01_08-17-28.jpg
 

Вложения

  • SMC Proceures Indicator.mq4
    6 КБ · Просмотры: 8

ИванМН

Местный знаток
Ребят, у меня такой индикатор, есть 3 ошибки, исправьте пожалуйста
У Вас просто оборван на полуслове листинг индикатора, часть кода отсутствует. Индикатор надо скачать заново и убедиться, что он целостен.
 

michaetom97

Новичок форума
Код индикатора не полный...
теперь работает, но не рисует, зона блоков заказов, зона FVG, ничего из процедуры smc, просто покажите диаграмму, как на картинке, пожалуйста, ребята, помогите
 

Вложения

  • xauusd-m30-raw-trading-ltd.png
    xauusd-m30-raw-trading-ltd.png
    74,9 КБ · Просмотры: 56
  • SMC Proceures Indicator.mq4
    9,4 КБ · Просмотры: 14

ИванМН

Местный знаток
Индикатор строится на графике, но не "цепляет" потоковые данные в тестере. Что-то пропущено в функции OnCalculate. Я плохо соображаю в архитектуре индикаторов, поэтому что именно пропущено, не смогу подсказать. Самому было бы интересно понять. Господа программисты-индикаторщики, подскажите?
 

ИванМН

Местный знаток
Миха, откуда Вы качаете эти индикаторы, что у них всегда оборваны концы? Отсутствует закрывающая фигурная скобка, а то и две, поэтому компилятор и пишет "Неожиданный конец программы". Скачайте индикатор заново или сбросьте сюда его текст.
 

michaetom97

Новичок форума
Миха, откуда Вы качаете эти индикаторы, что у них всегда оборваны концы? Отсутствует закрывающая фигурная скобка, а то и две, поэтому компилятор и пишет "Неожиданный конец программы". Скачайте индикатор заново или сбросьте сюда его текст.
строка 114 столбец 40:

// Function to display message in the middle of the chart
void DisplayMessageBox(string message) {
// Define box dimensions
int boxWidth = 300;
int boxHeight = 100;

// Calculate the middle of the chart
int chartWidth = ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
int chartHeight = ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);
int xPos = (chartWidth - boxWidth) / 2;
int yPos = (chartHeight - boxHeight) / 2;

// Create the box
string boxName = "AlertBox";
if (ObjectFind(0, boxName) != (0) {
ObjectCreate(0, boxName, OBJ_RECTANGLE_LABEL, 0, 0, 0);
ObjectSetInteger(0, boxName, OBJPROP_CORNER, 0);
ObjectSetInteger(0, boxName, OBJPROP_XSIZE, boxWidth);
ObjectSetInteger(0, boxName, OBJPROP_YSIZE, boxHeight);
ObjectSetInteger(0, boxName, OBJPROP_XDISTANCE, xPos);
ObjectSetInteger(0, boxName, OBJPROP_YDISTANCE, yPos);
ObjectSetInteger(0, boxName, OBJPROP_COLOR, clrRed);
ObjectSetInteger(0, boxName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSetInteger(0, boxName, OBJPROP_WIDTH, 2);
ObjectSetInteger(0, boxName, OBJPROP_BACK, true);
ObjectSetInteger(0, boxName, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, boxName, OBJPROP_SELECTED, false);
ObjectSetInteger(0, boxName, OBJPROP_HIDDEN, true);
ObjectSetString(0, boxName, OBJPROP_TEXT, message);
ObjectSetInteger(0, boxName, OBJPROP_FONTSIZE, 12);
ObjectSetInteger(0, boxName, OBJPROP_COLOR, clrBlack);
ObjectSetInteger(0, boxName, OBJPROP_TEXTCOLOR, clrWhite);
} else {
ObjectSetInteger(0, boxName, OBJPROP_XDISTANCE, xPos);
ObjectSetInteger(0, boxName, OBJPROP_YDISTANCE, yPos);
ObjectSetString(0, boxName, OBJPROP_TEXT, message);
}

строка 587 столбец 7:

if (OrderType() == OP_BUYSTOP && Ai_0 == 4 || Ai_0 == 7) {
count_4 = 0;
while (G_is_deleted_308 == 0) {
RefreshRates();
G_is_deleted_308 = OrderDelete(OrderTicket());
if (G_is_deleted_308 == 0) {
Sleep(1000);
count_4++;
}
if (GetLastError() == 4108/* INVALID_TICKET */ || GetLastError() == 145/* TRADE_MODIFY_DENIED */) G_is_deleted_308 = TRUE;
}
G_is_deleted_308 = FALSE;
}
if (OrderType() == OP_SELLSTOP && Ai_0 == 5 || Ai_0 == 7) {
count_4 = 0;
while (G_is_deleted_308 == 0) {
RefreshRates();
G_is_deleted_308 = OrderDelete(OrderTicket());
if (G_is_deleted_308 == 0) {
Sleep(1000);
count_4++;
}
if (GetLastError() == 4108/* INVALID_TICKET */ || GetLastError() == 145/* TRADE_MODIFY_DENIED */) G_is_deleted_308 = TRUE;
}
G_is_deleted_308 = FALSE;
}
}
 
Последнее редактирование:

DomovenokBrest

♔♕♖♗♘♙
строка 114 столбец 40:

// Function to display message in the middle of the chart
void DisplayMessageBox(string message) {
// Define box dimensions
int boxWidth = 300;
int boxHeight = 100;

// Calculate the middle of the chart
int chartWidth = ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
int chartHeight = ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);
int xPos = (chartWidth - boxWidth) / 2;
int yPos = (chartHeight - boxHeight) / 2;

// Create the box
string boxName = "AlertBox";
if (ObjectFind(0, boxName) != (0) {
ObjectCreate(0, boxName, OBJ_RECTANGLE_LABEL, 0, 0, 0);
ObjectSetInteger(0, boxName, OBJPROP_CORNER, 0);
ObjectSetInteger(0, boxName, OBJPROP_XSIZE, boxWidth);
ObjectSetInteger(0, boxName, OBJPROP_YSIZE, boxHeight);
ObjectSetInteger(0, boxName, OBJPROP_XDISTANCE, xPos);
ObjectSetInteger(0, boxName, OBJPROP_YDISTANCE, yPos);
ObjectSetInteger(0, boxName, OBJPROP_COLOR, clrRed);
ObjectSetInteger(0, boxName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSetInteger(0, boxName, OBJPROP_WIDTH, 2);
ObjectSetInteger(0, boxName, OBJPROP_BACK, true);
ObjectSetInteger(0, boxName, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, boxName, OBJPROP_SELECTED, false);
ObjectSetInteger(0, boxName, OBJPROP_HIDDEN, true);
ObjectSetString(0, boxName, OBJPROP_TEXT, message);
ObjectSetInteger(0, boxName, OBJPROP_FONTSIZE, 12);
ObjectSetInteger(0, boxName, OBJPROP_COLOR, clrBlack);
ObjectSetInteger(0, boxName, OBJPROP_TEXTCOLOR, clrWhite);
} else {
ObjectSetInteger(0, boxName, OBJPROP_XDISTANCE, xPos);
ObjectSetInteger(0, boxName, OBJPROP_YDISTANCE, yPos);
ObjectSetString(0, boxName, OBJPROP_TEXT, message);
}

строка 587 столбец 7:

if (OrderType() == OP_BUYSTOP && Ai_0 == 4 || Ai_0 == 7) {
count_4 = 0;
while (G_is_deleted_308 == 0) {
RefreshRates();
G_is_deleted_308 = OrderDelete(OrderTicket());
if (G_is_deleted_308 == 0) {
Sleep(1000);
count_4++;
}
if (GetLastError() == 4108/* INVALID_TICKET */ || GetLastError() == 145/* TRADE_MODIFY_DENIED */) G_is_deleted_308 = TRUE;
}
G_is_deleted_308 = FALSE;
}
if (OrderType() == OP_SELLSTOP && Ai_0 == 5 || Ai_0 == 7) {
count_4 = 0;
while (G_is_deleted_308 == 0) {
RefreshRates();
G_is_deleted_308 = OrderDelete(OrderTicket());
if (G_is_deleted_308 == 0) {
Sleep(1000);
count_4++;
}
if (GetLastError() == 4108/* INVALID_TICKET */ || GetLastError() == 145/* TRADE_MODIFY_DENIED */) G_is_deleted_308 = TRUE;
}
G_is_deleted_308 = FALSE;
}
}
Браво!!!
 

ИванМН

Местный знаток
строка 114 столбец 40:

// Function to display message in the middle of the chart
void DisplayMessageBox(string message) {
// Define box dimensions
int boxWidth = 300;
int boxHeight = 100;

// Calculate the middle of the chart
int chartWidth = ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
int chartHeight = ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);
int xPos = (chartWidth - boxWidth) / 2;
int yPos = (chartHeight - boxHeight) / 2;

// Create the box
string boxName = "AlertBox";
if (ObjectFind(0, boxName) != (0) {
ObjectCreate(0, boxName, OBJ_RECTANGLE_LABEL, 0, 0, 0);
ObjectSetInteger(0, boxName, OBJPROP_CORNER, 0);
ObjectSetInteger(0, boxName, OBJPROP_XSIZE, boxWidth);
ObjectSetInteger(0, boxName, OBJPROP_YSIZE, boxHeight);
ObjectSetInteger(0, boxName, OBJPROP_XDISTANCE, xPos);
ObjectSetInteger(0, boxName, OBJPROP_YDISTANCE, yPos);
ObjectSetInteger(0, boxName, OBJPROP_COLOR, clrRed);
ObjectSetInteger(0, boxName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSetInteger(0, boxName, OBJPROP_WIDTH, 2);
ObjectSetInteger(0, boxName, OBJPROP_BACK, true);
ObjectSetInteger(0, boxName, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, boxName, OBJPROP_SELECTED, false);
ObjectSetInteger(0, boxName, OBJPROP_HIDDEN, true);
ObjectSetString(0, boxName, OBJPROP_TEXT, message);
ObjectSetInteger(0, boxName, OBJPROP_FONTSIZE, 12);
ObjectSetInteger(0, boxName, OBJPROP_COLOR, clrBlack);
ObjectSetInteger(0, boxName, OBJPROP_TEXTCOLOR, clrWhite);
} else {
ObjectSetInteger(0, boxName, OBJPROP_XDISTANCE, xPos);
ObjectSetInteger(0, boxName, OBJPROP_YDISTANCE, yPos);
ObjectSetString(0, boxName, OBJPROP_TEXT, message);
}

строка 587 столбец 7:

if (OrderType() == OP_BUYSTOP && Ai_0 == 4 || Ai_0 == 7) {
count_4 = 0;
while (G_is_deleted_308 == 0) {
RefreshRates();
G_is_deleted_308 = OrderDelete(OrderTicket());
if (G_is_deleted_308 == 0) {
Sleep(1000);
count_4++;
}
if (GetLastError() == 4108/* INVALID_TICKET */ || GetLastError() == 145/* TRADE_MODIFY_DENIED */) G_is_deleted_308 = TRUE;
}
G_is_deleted_308 = FALSE;
}
if (OrderType() == OP_SELLSTOP && Ai_0 == 5 || Ai_0 == 7) {
count_4 = 0;
while (G_is_deleted_308 == 0) {
RefreshRates();
G_is_deleted_308 = OrderDelete(OrderTicket());
if (G_is_deleted_308 == 0) {
Sleep(1000);
count_4++;
}
if (GetLastError() == 4108/* INVALID_TICKET */ || GetLastError() == 145/* TRADE_MODIFY_DENIED */) G_is_deleted_308 = TRUE;
}
G_is_deleted_308 = FALSE;
}
}
🤦‍♂️🤦‍♂️🤦‍♂️ Файл сбросьте, файл...
 
Верх