Спрашивайте! - страница 82

 

Codersguru, пожалуйста, помогите

Codersguru

Я пытаюсь написать звуковое оповещение для индикатора bullspower при пересечении нулевой линии. у меня нет опыта работы с MQL, но я собрал код из нескольких других индикаторов. при компиляции кода ошибок нет. хотя оповещение индикатора не работает, не могли бы вы помочь либо исправить его, либо написать новый код для этого звукового оповещения, когда Bullbears пересекает нулевую линию?

заранее большое спасибо

//+------------------------------------------------------------------+

//| |

//| |

//| |

//| |

//+------------------------------------------------------------------+

#property copyright "forex-tsd"

#property link "https://www.forex-tsd.com"

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Crimson

#property indicator_level1 0

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double valbull[];

double valbear[];

//+------------------------------------------------------------------+

//| Пользовательская функция инициализации индикатора |

//+------------------------------------------------------------------+

int init()

{

IndicatorBuffers(3);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexDrawBegin(0,2);

SetIndexLabel(0, "ExtMapBuffer1");

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 4);

SetIndexDrawBegin(1,2);

SetIndexLabel(1, "ExtMapBuffer2");

//---- индикаторы

//----

return(0);

}

//+------------------------------------------------------------------+

//| Функция деинициализации индикатора Custor |

//+------------------------------------------------------------------+

int deinit()

{

//---- TODO: добавьте свой код сюда

//----

return(0);

}

//+------------------------------------------------------------------+

//| Пользовательская функция итерации индикатора |

//+------------------------------------------------------------------+

int start()

{

int shift,counted_bars=IndicatorCounted();

double valbear[], valbull[];

//---- проверка на возможные ошибки

if(counted_bars<0) return(-1);

//---- последний подсчитанный бар будет пересчитан

if(counted_bars>0) counted_bars--;

shift=Bars-1;

while(shift>=0)

{

valbull[shift]=iBullsPower(NULL, 0, 13,PRICE_CLOSE,0);

valbear[shift]=iBearsPower(NULL, 0, 13,PRICE_CLOSE,0);

if (valbull[shift]>0)

{

ExtMapBuffer1[shift]=valbull[shift];

ExtMapBuffer2[shift]=0;

}

else

{

ExtMapBuffer2[shift]=valbull[shift];

ExtMapBuffer1[shift]=0;

}

shift--;//

}

//---- модуль оповещения

#define SIGNAL_BAR 1

//---- Статические переменные, в которых хранится время последнего бара.

//---- и последнее направление алерта хранятся

static int PrevSignal = 0, PrevTime = 0;

//---- Если выбранный для анализа бар не является нулевым,

//не имеет смысла проверять алерт

//---- несколько раз. Если новый бар не начинает формироваться, выходим.

if(SIGNAL_BAR > 0 && Time[0] <= PrevTime )

return(0);

//---- Отметьте, что этот бар был проверен.

PrevTime = Time[0];

if(PrevSignal <= 0)

{

if(valbull[SIGNAL_BAR] > 0 )

{

PrevSignal = 1;

Alert("BullChannell_positiv (", Symbol(), ", ", Period(), ") - ПОКУПАТЬ!!!");

}

}

if(PrevSignal >= 0)

{

if(valbull[SIGNAL_BAR] < 0 )

{

PrevSignal = -1;

Alert("BearChannell_negativ (", Symbol(), ", ", Period(), ") - ПРОДАЕМ!!!");

}

}

//---- end alert module

//----

return(0);

}

//+------------------------------------------------------------------+

 

Как использовать функцию для различения открытых ордеров и отложенных ордеров?

Как использовать функцию для различения открытых ордеров и отложенных ордеров?

Спасибо.

 
vntb:
Как использовать функцию для различения открытых ордеров и отложенных ордеров? Спасибо.

Проверьте OrderType() :

OrderType() == OP_BUY //Ордер на покупку (открыт)

OrderType() == OP_SELL //Ордер на продажу (открыт)

OrderType() == OP_BUYLIMIT //Ордер на покупку (отложенный)

OrderType() == OP_SELLLIMIT //Лимитный ордер на продажу (в процессе исполнения)

OrderType() == OP_BUYSTOP //Ордер стоп на покупку (ожидает исполнения)

OrderType() == OP_SELLSTOP //Ордер на продажу (в ожидании)

 

iMAOnArray в советнике

Здравствуйте, друзья,

Я пытаюсь сделать EMA на основе пересечений скользящих средних на индикаторах (например, CCI, Force, RSI). Однако я не могу понять, как объявить массив и запустить функцию iMAOnArray для создания переменных.

Например, в приведенном ниже коде я хочу поместить данные RSI для графика в буфер, а затем использовать эти данные для создания скользящей средней, с помощью которой можно запускать сделки. Что я делаю не так?

Спасибо за любые комментарии и предложения.

осень

double RSI[];

ArrayResize(RSI,Bars);

ArraySetAsSeries(RSI,true);

for(int i=Bars; i>=0; i--)

{

RSI = (iRSI(NULL,0,RSIPeriod,RSIPrice,i));

}

double Green0 = iMAOnArray(RSI,0,GreenPeriod,0,GreenPrice,0);

 

Здравствуйте

У кого-нибудь есть step-momentum с алертом?

Это будет отличный индикатор, я думаю.

спасибо

спасибо!

 

Закрытие сделки по уровню

Здравствуйте, я хотел бы узнать, как закрыть сделку, когда цена достигла определенного уровня. Скажем, 55 пунктов выше линии MA. Я пытался включить MA в часть TakeProfit в OrderSend, но тестер отклонил мой советник с сообщением об ошибке: "invalid something". Спасибо.

 
Sendra:
Здравствуйте, я хотел бы узнать, как закрыть сделку, когда цена достигла определенного уровня. Скажем, 55 пунктов выше линии MA. Я пытался включить MA в часть TakeProfit в OrderSend, но тестер отклонил мой советник с сообщением об ошибке: "invalid something". Спасибо.

Прежде всего, получите скользящую среднюю:

double MA = iMA(...);

затем рассчитайте TakeProfit следующим образом:

double TP = MA + (55*Point); // или TP = MA-(55*Point); в случае продажи.

 

Работает!!!

Эй, спасибо, CodersGuru. Это действительно работает. Но это также заставило меня задуматься: если я могу переместить тейк-профит на определенный уровень, который не является статичным, я могу сделать то же самое со стоплоссом (без использования трейлингстопа).

И я попробовал.

Это сработало, но с плохим результатом. Так что, я думаю, я должен сделать это с помощью трейлингстопа. Это правильно? (Учтите, я еще не научился кодировать трейлингстоп).

Спасибо.

 

Внутренний трейлинг-стоп

Sendra:
Спасибо, CodersGuru. Это действительно работает. Но это также заставляет меня задуматься: если я могу переместить тейк-профит на определенный уровень, который не является статичным, я могу сделать то же самое со стоплоссом (без использования трейлингстопа).

И я попробовал.

Это сработало, но с плохим результатом. Итак, я полагаю, что мне нужно сделать трейлингстоп. Это правильно? (Учтите, я еще не научился кодировать трейлингстоп).

Спасибо.

Я сделал что-то вроде этого для внутреннего трейлинг-стопа: (это пример для длинного ордера) Кажется, это работает. Надеюсь, это поможет.

extern int Trailing_Stop=20;

static double Trailing_Long;

bool Read_Long_Open;

if (Insert your long entry decision)

{

Функция Ordersend() здесь

Read_Long_Open=true;

}

if (Read_Long_Open==true)

{

if(OrderSelect(T_1L, SELECT_BY_TICKET)==true)

{

Trailing_Long=OrderOpenPrice();

Print(" Trailing_Long =",Trailing_Long);

Read_Long_Open=false;

}

}

if (Read_Long_Open==false)

{

if (Trailing_Long < Bid)

{

Trailing_Long=Bid;

Print("Adjusted Trailing_Long =",Trailing_Long);

}

}

if (Bid <= Trailing_Long-Trailing_Stop*Point)

{

Функция OrderClose()

Print("Длинный ордер закрыт");

}

 

Спасибо

Привет, Вульф,

Я попробовал ваш код, но вместо этого получил более отрицательный результат. Пожалуйста, не спрашивайте почему, потому что я тоже не знаю ответа. Учтите, я все еще нахожусь в фазе удара и бегства в кодировании. Но все равно спасибо, ваш код дал мне достаточно вдохновения, чтобы написать свой собственный с достаточным для меня результатом.

Так что, спасибо.