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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от sergez



Индикаторы Комментариев 3
2013-02-07 11:53:07Рейтинг 0

Доработка индикатора

Здравствуйте!
Необходимо на основании прикрепленного индикатора (по сути обычный ZigZag), сделать советник для закрытия ордеров.
Условия: при закрытии свечи с маркером от индикатора автоматически закрывается сделка (если она открыта) в том или ином направлении.


ПСЫ: ТС ручная, бывает что до ТР чутка не дотягивается, а возможности мониторить терминал постоянно нет *pardon* 

_00Butterfly.mq4 (4 Kb)
  • 0
  • Просмотров: 3638
  • 6 августа 2015, 12:42
  • sergez
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Начал делать.
avatar

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

  • 6 августа 2015, 13:27
+
0
Сейчас можно торговать по показаниям индикатора и закрывать позицию.
www.opentraders.ru/downloads/825/

Параметр отключается в настройках.


extern int PosOpen = 1; //0-выкл. 1-вкл.


Имя вашего индикатора укажете в строке:


extern string IndName  = "IndButterfly";


avatar

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

  • 6 августа 2015, 15:09
+
0
Огромное человеческое — спасибо! Оперативность впечатляет!)
avatar

  8  sergez Автор Сообщений: 11

  • 6 августа 2015, 18:18
комментарий был удален 2015-08-07 13:08:29 sergez

+
0
Предлагаю добавить инди #property copyright «mladen»
#property link «mladenfx@gmail.com»

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Black
#property indicator_color2 Red
#property indicator_color3 LimeGreen
#property indicator_color4 Purple
#property indicator_color5 Purple

extern string TimeFrame = «current time frame»;
extern int HalfLength = 50;
extern int Price = 6;
extern double BandsDeviations = 3.0;
extern bool Interpolate = TRUE;
extern bool alertsOn = TRUE;
extern bool alertsOnCurrent = FALSE;
extern bool alertsOnHighLow = FALSE;
extern bool alertsMessage = TRUE;
extern bool alertsSound = FALSE;
extern bool alertsEmail = FALSE;
double G_ibuf_128[];
double G_ibuf_132[];
double G_ibuf_136[];
double G_ibuf_140[];
double G_ibuf_144[];
double G_ibuf_148[];
double G_ibuf_152[];
string Gs_156;
bool Gi_164 = FALSE;
bool Gi_168 = FALSE;
int G_timeframe_172;
string Gs_176 = "";
datetime G_time_184;

int init() {
G_timeframe_172 = f0_0(TimeFrame);
HalfLength = MathMax(HalfLength, 1);
IndicatorBuffers(7);
SetIndexBuffer(0, G_ibuf_128);
SetIndexDrawBegin(0, HalfLength);
SetIndexBuffer(1, G_ibuf_132);
SetIndexDrawBegin(1, HalfLength);
SetIndexBuffer(2, G_ibuf_136);
SetIndexDrawBegin(2, HalfLength);
SetIndexBuffer(3, G_ibuf_152);
SetIndexStyle(3, DRAW_ARROW);
SetIndexArrow(5, SYMBOL_ARROWDOWN);
SetIndexBuffer(4, G_ibuf_148);
SetIndexStyle(4, DRAW_ARROW);
SetIndexArrow(6, SYMBOL_ARROWUP);
SetIndexBuffer(5, G_ibuf_140);
SetIndexBuffer(6, G_ibuf_144);
if (TimeFrame == «calculateTma») {
Gi_164 = TRUE;
return (0);
}
if (TimeFrame == «returnBars») {
Gi_168 = TRUE;
return (0);
}
Gs_156 = WindowExpertName();
return (0);
}

int deinit() {
return (0);
}

int start() {
int shift_12;
int datetime_16;
double Ld_24;
int Li_36;
int Li_0 = IndicatorCounted();
if (Li_0 < 0) return (-1);
if (Li_0 > 0) Li_0--;
int Li_8 = MathMin(Bars — 1, Bars — Li_0 + HalfLength);
if (Gi_168) {
G_ibuf_128[0] = Li_8;
return (0);
}
if (Gi_164) {
f0_2(Li_8);
return (0);
}
if (G_timeframe_172 > Period()) Li_8 = MathMax(Li_8, MathMin(Bars — 1, iCustom(NULL, G_timeframe_172, Gs_156, «returnBars», 0, 0) * G_timeframe_172 / Period()));
for (int Li_4 = Li_8; Li_4 >= 0; Li_4--) {
shift_12 = iBarShift(NULL, G_timeframe_172, Time[Li_4]);
datetime_16 = iTime(NULL, G_timeframe_172, shift_12);
G_ibuf_128[Li_4] = iCustom(NULL, G_timeframe_172, Gs_156, «calculateTma», HalfLength, Price, BandsDeviations, 0, shift_12);
G_ibuf_132[Li_4] = iCustom(NULL, G_timeframe_172, Gs_156, «calculateTma», HalfLength, Price, BandsDeviations, 1, shift_12);
G_ibuf_136[Li_4] = iCustom(NULL, G_timeframe_172, Gs_156, «calculateTma», HalfLength, Price, BandsDeviations, 2, shift_12);
G_ibuf_148[Li_4] = EMPTY_VALUE;
G_ibuf_152[Li_4] = EMPTY_VALUE;
if (High[Li_4 + 1] > G_ibuf_132[Li_4 + 1] && Close[Li_4 + 1] > Open[Li_4 + 1] && Close[Li_4] < Open[Li_4]) G_ibuf_148[Li_4] = High[Li_4] + iATR(NULL, 0, 20, Li_4);
if (Low[Li_4 + 1] < G_ibuf_136[Li_4 + 1] && Close[Li_4 + 1] < Open[Li_4 + 1] && Close[Li_4] > Open[Li_4]) G_ibuf_152[Li_4] = High[Li_4] — iATR(NULL, 0, 20, Li_4);
if (G_timeframe_172 <= Period() || shift_12 == iBarShift(NULL, G_timeframe_172, Time[Li_4 — 1])) continue;
if (Interpolate) {
for (int Li_20 = 1; Li_4 + Li_20 < Bars && Time[Li_4 + Li_20] >= datetime_16; Li_20++) {
}
Ld_24 = 1.0 / Li_20;
for (int Li_32 = 1; Li_32 < Li_20; Li_32++) {
G_ibuf_128[Li_4 + Li_32] = Li_32 * Ld_24 * (G_ibuf_128[Li_4 + Li_20]) + (1.0 — Li_32 * Ld_24) * G_ibuf_128[Li_4];
G_ibuf_132[Li_4 + Li_32] = Li_32 * Ld_24 * (G_ibuf_132[Li_4 + Li_20]) + (1.0 — Li_32 * Ld_24) * G_ibuf_132[Li_4];
G_ibuf_136[Li_4 + Li_32] = Li_32 * Ld_24 * (G_ibuf_136[Li_4 + Li_20]) + (1.0 — Li_32 * Ld_24) * G_ibuf_136[Li_4];
}
}
}
if (alertsOn) {
if (alertsOnCurrent) Li_36 = 0;
else Li_36 = 1;
if (alertsOnHighLow) {
if (High[Li_36] > G_ibuf_132[Li_36] && High[Li_36 + 1] < G_ibuf_132[Li_36 + 1]) f0_1(«high penetrated upper bar»);
if (Low[Li_36] < G_ibuf_136[Li_36] && Low[Li_36 + 1] > G_ibuf_136[Li_36 + 1]) f0_1(«low penetrated lower bar»);
} else {
if (Close[Li_36] > G_ibuf_132[Li_36] && Close[Li_36 + 1] < G_ibuf_132[Li_36 + 1]) f0_1(«Exit buy»);
if (Close[Li_36] < G_ibuf_136[Li_36] && Close[Li_36 + 1] > G_ibuf_136[Li_36 + 1]) f0_1(«Exit sell»);
}
}
return (0);
}

void f0_2(int Ai_0) {
int Li_8;
double Ld_24;
double Ld_32;
double Ld_40;
double Ld_16 = 2.0 * HalfLength + 1.0;
for (int Li_4 = Ai_0; Li_4 >= 0; Li_4--) {
Ld_24 = (HalfLength + 1) * iMA(NULL, 0, 1, 0, MODE_SMA, Price, Li_4);
Ld_32 = HalfLength + 1;
Li_8 = 1;
for (int Li_12 = HalfLength; Li_8 <= HalfLength; Li_12--) {
Ld_24 += Li_12 * iMA(NULL, 0, 1, 0, MODE_SMA, Price, Li_4 + Li_8);
Ld_32 += Li_12;
if (Li_8 <= Li_4) {
Ld_24 += Li_12 * iMA(NULL, 0, 1, 0, MODE_SMA, Price, Li_4 — Li_8);
Ld_32 += Li_12;
}
Li_8++;
}
G_ibuf_128[Li_4] = Ld_24 / Ld_32;
Ld_40 = iMA(NULL, 0, 1, 0, MODE_SMA, Price, Li_4) — G_ibuf_128[Li_4];
if (Li_4 <= Bars — HalfLength — 1) {
if (Li_4 == Bars — HalfLength — 1) {
G_ibuf_132[Li_4] = G_ibuf_128[Li_4];
G_ibuf_136[Li_4] = G_ibuf_128[Li_4];
if (Ld_40 >= 0.0) {
G_ibuf_140[Li_4] = MathPow(Ld_40, 2);
G_ibuf_144[Li_4] = 0;
continue;
}
G_ibuf_144[Li_4] = MathPow(Ld_40, 2);
G_ibuf_140[Li_4] = 0;
continue;
}
if (Ld_40 >= 0.0) {
G_ibuf_140[Li_4] = ((G_ibuf_140[Li_4 + 1]) * (Ld_16 — 1.0) + MathPow(Ld_40, 2)) / Ld_16;
G_ibuf_144[Li_4] = (G_ibuf_144[Li_4 + 1]) * (Ld_16 — 1.0) / Ld_16;
} else {
G_ibuf_144[Li_4] = ((G_ibuf_144[Li_4 + 1]) * (Ld_16 — 1.0) + MathPow(Ld_40, 2)) / Ld_16;
G_ibuf_140[Li_4] = (G_ibuf_140[Li_4 + 1]) * (Ld_16 — 1.0) / Ld_16;
}
G_ibuf_132[Li_4] = G_ibuf_128[Li_4] + BandsDeviations * MathSqrt(G_ibuf_140[Li_4]);
G_ibuf_136[Li_4] = G_ibuf_128[Li_4] — BandsDeviations * MathSqrt(G_ibuf_144[Li_4]);
}
}
}

void f0_1(string As_0) {
string str_concat_8;
if (Gs_176 != As_0 || G_time_184 != Time[0]) {
Gs_176 = As_0;
G_time_184 = Time[0];
str_concat_8 = StringConcatenate(Symbol(), " at ", TimeToStr(TimeLocal(), TIME_SECONDS), " PB: ", As_0);
if (alertsMessage) Alert(str_concat_8);
if (alertsEmail) SendMail(StringConcatenate(Symbol(), «TMA „), str_concat_8);
if (alertsSound) PlaySound(“alert2.wav»);
}
}

int f0_0(string As_0) {
int Li_12;
for (int Li_8 = StringLen(As_0) — 1; Li_8 >= 0; Li_8--) {
Li_12 = StringGetChar(As_0, Li_8);
if ((Li_12 > '`' && Li_12 < '{') || (Li_12 > 'Я' && Li_12 < 256)) As_0 = StringSetChar(As_0, 1, Li_12 — 32);
else
if (Li_12 > -33 && Li_12 < 0) As_0 = StringSetChar(As_0, 1, Li_12 + 224);
}
int timeframe_16 = 0;
if (As_0 == «M1» || As_0 == «1») timeframe_16 = 1;
if (As_0 == «M5» || As_0 == «5») timeframe_16 = 5;
if (As_0 == «M15» || As_0 == «15») timeframe_16 = 15;
if (As_0 == «M30» || As_0 == «30») timeframe_16 = 30;
if (As_0 == «H1» || As_0 == «60») timeframe_16 = 60;
if (As_0 == «H4» || As_0 == «240») timeframe_16 = 240;
if (As_0 == «D1» || As_0 == «1440») timeframe_16 = 1440;
if (As_0 == «W1» || As_0 == «10080») timeframe_16 = 10080;
if (As_0 == «MN» || As_0 == «43200») timeframe_16 = 43200;
if (timeframe_16 == 0 || timeframe_16 < Period()) timeframe_16 = Period();
return (timeframe_16);
}
И условие — открывать при возврате после пробития или касания границы канала. Открывать сразу два ордера, профит первого 20 старых пунктов после этого стоп второго переносится на размер профита, закрытие второго по обратному сигналу
Редактирован: 15 августа 2015, 01:08
avatar

  8  Genri Сообщений: 378

  • 15 августа 2015, 01:00
+
0
Подскажите, пожалуйста, я беру другой индикаторЮ вписываю его в советник, но он не закрывает позицию. Или надо индикатор переименовать в IndButterfly, только тогда он заработает?
avatar

  20  nonych Сообщений: 125 - Евгеша

  • 3 февраля 2016, 03:47
+
0
Прежде всего проверьте в коде советника включен ли он:
extern int PosOpen = 1; //0-выкл. 1-вкл.
По поводу корректности работы с Вашим индикатором ничего сказать не могу, это Вам лучше Андрею (АМ2) задать вопрос.
avatar

  8  sergez Автор Сообщений: 11

  • 3 февраля 2016, 08:34

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