Дорабатываю индикатор CrossArbitr. Помогите разобраться. Нужно чтобы значение b(Итог) суммировались s в течении минуты (0 бара) и отображались с другими показателями на графике, по истечению минуты сумма s фиксировалась, s1=s, начинала заново формироваться. Показатели s1 один также нужно вывести на график. Вот код индикатора.
//+------------------------------------------------------------------+//| CrossArbitr.mq4 |//| Scriptong |//| |//+------------------------------------------------------------------+#property copyright"Scriptong"#property link""#property indicator_chart_window//---- input parametersexternbool ShowBid=false;
externbool ShowAsk=false;
externcolor BidColor = Lime;
externcolor AskColor = Yellow;
externint AlarmIfPointDifference = 10;
externstring AlarmFile = "wait.wav";
bool Activate = False;
string FP, SP;
double Tick;
int WayForCross;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicatorsstring S = Symbol();
if(StringFind(S, "USD", 0) != -1)
{
Comment("Индикатор работает только с кроссовыми парами (GBPJPY, EURJPY, EURGBP и т. д)!");
return(0);
}
if(StringLen(S) != 6)
{
Comment("Индикатор работает только с валютными парами, у которых название состоит из шести символов!");
return(0);
}
// Поиск первой валютной пары кросса
FP = StringSubstr(S, 0, 3)+"USD";
MarketInfo(FP, MODE_BID);
if(GetLastError() > 0)
{
FP = "USD"+StringSubstr(S, 0, 3);
MarketInfo(FP, MODE_BID);
if(GetLastError() > 0)
{
Comment("Невозможно найти инструмент ", FP, " или ", StringSubstr(S, 0, 3)+"USD. Необходимо добавить его в Обзоре рынка и перезапустить индикатор.");
return(0);
}
}
// -------------------------------------- // "Создание" второй валютной пары кросса
SP = "USD"+StringSubstr(S, 3, 3);
MarketInfo(SP, MODE_BID);
if(GetLastError() > 0)
{
SP = StringSubstr(S, 3, 3)+"USD";
MarketInfo(SP, MODE_BID);
if(GetLastError() > 0)
{
Comment("Невозможно найти инструмент ", SP, " или ", StringSubstr(S, 3, 3)+"USD. Необходимо добавить его в Обзоре рынка и перезапустить индикатор.");
return(0);
}
}
// -------------------------------------- // Определение пути синтеза кроссаif (StringFind(FP, "USD") == 3 && StringFind(SP, "USD") == 0)
WayForCross = 1;
if (StringFind(FP, "USD") == 0 && StringFind(SP, "USD") == 0)
WayForCross = 2;
if (StringFind(FP, "USD") == 3 && StringFind(SP, "USD") == 3)
WayForCross = 3;
if (StringFind(FP, "USD") == 0 && StringFind(SP, "USD") == 3)
WayForCross = 4;
// -------------------------------
Tick = MarketInfo(Symbol(), MODE_TICKSIZE);
Activate = True;
//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----Comment("");
if(ObjectFind("CrossBid") == 0)
ObjectDelete("CrossBid");
if(ObjectFind("CrossAsk") == 0)
ObjectDelete("CrossAsk");
//----return(0);
}
//+------------------------------------------------------------------+//| Приведение значений к точности одного тика |//+------------------------------------------------------------------+double ND(double A)
{
return(NormalizeDouble(A, Digits));
}
//+------------------------------------------------------------------+//| Расчет значения синтетического бида |//+------------------------------------------------------------------+double CalcBidWayForCross()
{
switch (WayForCross)
{
case1: return(ND(MarketInfo(FP, MODE_BID)*MarketInfo(SP, MODE_BID)));
case2: return(ND(MarketInfo(SP, MODE_BID)/MarketInfo(FP, MODE_ASK)));
case3: return(ND(MarketInfo(FP, MODE_BID)/MarketInfo(SP, MODE_ASK)));
case4: return(1/(ND(MarketInfo(FP, MODE_ASK)*MarketInfo(SP, MODE_BID))));
}
}
//+------------------------------------------------------------------+//| Расчет значения синтетического аска |//+------------------------------------------------------------------+double CalcAskWayForCross()
{
switch (WayForCross)
{
case1: return(ND(MarketInfo(FP, MODE_ASK)*MarketInfo(SP, MODE_ASK)));
case2: return(ND(MarketInfo(SP, MODE_ASK)/MarketInfo(FP, MODE_BID)));
case3: return(ND(MarketInfo(FP, MODE_ASK)/MarketInfo(SP, MODE_BID)));
case4: return(1/(ND(MarketInfo(FP, MODE_BID)*MarketInfo(SP, MODE_ASK))));
}
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
int counted_bars=IndicatorCounted();
//----if(!Activate)
return(0);
// Расчет синтетических Bid и Askdouble CalcBid = CalcBidWayForCross();
RefreshRates();
double CalcAsk = CalcAskWayForCross();
double n,m,b,s,s1;
int t = Seconds();
// -------------------------------// Рисуем уровень синтетического Bidif (ShowBid)
{
if(ObjectFind("CrossBid") == -1)
{
ObjectCreate("CrossBid", OBJ_HLINE, 0, 0, CalcBid);
ObjectSet("CrossBid", OBJPROP_COLOR, BidColor);
ObjectSet("CrossBid", OBJPROP_STYLE, STYLE_DOT);
}
elseif(!ObjectMove("CrossBid", 0, 1, CalcBid))
Print("Ошибка перемещения №", GetLastError());
}
// ---------------------------------- // Рисуем уровень синтетического Askif(ShowAsk)
{
if(ObjectFind("CrossAsk") == -1)
{
ObjectCreate("CrossAsk", OBJ_HLINE, 0, 0, CalcAsk);
ObjectSet("CrossAsk", OBJPROP_COLOR, AskColor);
ObjectSet("CrossAsk", OBJPROP_STYLE, STYLE_DOT);
}
elseObjectMove("CrossAsk", 0, 1, CalcAsk);
if(t > 0)
{s=b; b++;}
else s1=s;
}
// ---------------------------------- Comment("Реальный BID = ", DoubleToStr(Bid, Digits), ", реальный ASK = ", DoubleToStr(Ask, Digits),
"\nСинтетик BID = ", DoubleToStr(CalcBid, Digits), ", синтетик ASK = ", DoubleToStr(CalcAsk, Digits),
"\nРазница BID Синтетика и Реального =", n=(Bid-CalcBid),
"\, Разница ASK Синтетика и Реального =", m=(CalcAsk-Ask),
"\nИтог =", b=(CalcAsk-Ask) - (Bid-CalcBid),
"\nПрошлый бар =", s1, ", Текущий бар =", s
);
// Выдаем звуковой сигнал о превышении минимальной разностиif(ND(MathAbs(CalcBid-Bid)) >= ND(AlarmIfPointDifference*Point))
PlaySound(AlarmFile);
// -------------------------------------------------------- //----return(0);
}
//+------------------------------------------------------------------+
И ещё, пытаюсь установить эксперт Exp-Monitoring-Spread на график - не ставится. МТ4 пишет в журнале, что он не является экспертом и не может быть установлен. Ошибок в компиляторе не выявлено. В качестве скрипта запускается, но не работает офлайн график. Что можно сделать? На всякий случай код прилагается.
ganri: Можно ли поправить советник, в котором надо заменить обычные открываемые сделки на трейлинговые?
Если советник был сгенерирован с помощью MQL Wizard'a, то это просто - в процессе создания советника нужно указать, что нужен трейлингстоп и выбрать на основе чего будет этот трейлинг.
barabashkakvn: Если советник был сгенерирован с помощью MQL Wizard'a, то это просто - в процессе создания советника нужно указать, что нужен трейлингстоп и выбрать на основе чего будет этот трейлинг.
Можно ли загружать графики для тех.анализа,- индексов S&P 500 Futures Chart , TA 25 Chart, и S&P 500 Chart если это возможно может подскажете как это сделать,может есть объяснение как загружать! Заранее благодарен.
так?
Показывает ошибку. У вас все нормально работало?
can't open "C:\Program Files\Alpari Limited MT5 Demo 1\MQL5\include\Expert\Signal\MySignals\ACH_HM_RSI.mqh" include file expert_ah_hm_rsi.mq5 14 11
Показывает ошибку. У вас все нормально работало?
can't open "C:\Program Files\Alpari Limited MT5 Demo 1\MQL5\include\Expert\Signal\MySignals\ACH_HM_RSI.mqh" include file expert_ah_hm_rsi.mq5 14 11
у меня да.
помещайте файлы в указанные папки.
у меня да.
помещайте файлы в указанные папки.
Спасибо, все работает! :)
Всем привет!
Дорабатываю индикатор CrossArbitr. Помогите разобраться. Нужно чтобы значение b(Итог) суммировались s в течении минуты (0 бара) и отображались с другими показателями на графике, по истечению минуты сумма s фиксировалась, s1=s, начинала заново формироваться. Показатели s1 один также нужно вывести на график. Вот код индикатора.
И ещё, пытаюсь установить эксперт Exp-Monitoring-Spread на график - не ставится. МТ4 пишет в журнале, что он не является экспертом и не может быть установлен. Ошибок в компиляторе не выявлено. В качестве скрипта запускается, но не работает офлайн график. Что можно сделать? На всякий случай код прилагается.
Можно ли поправить советник, в котором надо заменить обычные открываемые сделки на трейлинговые?
Если советник был сгенерирован с помощью MQL Wizard'a, то это просто - в процессе создания советника нужно указать, что нужен трейлингстоп и выбрать на основе чего будет этот трейлинг.
Заранее благодарен.