Ответ
 
Опции темы
Старый 18.01.2015, 06:49   #3421 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от ansol Посмотреть сообщение
Я, возможно, неудачно выразился, тогда уточню/поправлюсь:
Данная конструкция будет работать безо вских "=="
Если интересует значение true, то пишем
if(OrderModify(...))
Если false, то
if(!OrderModify(...))
А идиотская конструкция if(OrderModify == true или false) не нужна.
Так понятней?
И из-за этого такая истерика???
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 18.01.2015, 07:14   #3422 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от Milord Посмотреть сообщение
давайте разберем ошибки кода хотя бы без проверок на ошибки, чтобы было понятнее, у мня вопрос - зачем сравнивать как вы пишете
if(Bid-OrderStopLoss>TrailigStart*Point)

ведь при открытии ордера я могу вапще убрать StopLoss=0
и второй момент, трал начинает работу когда цена идет в нашу сторону, то есть разница между текущей ценой Bid и ценой открытия ордера дает профит, я прав???? но где тогда ошибки в коде, и почему трал не работает..?
Я дал тебе только часть твоей строки и сказал что в этой строке такая ошибка. Но сегодня со свежей головой вижу что проверка по стопу есть в следующей строке. Но как-то не совсем мне понятно что с чем сравниваешь в условиях. Ведь это всё можно записать словами и перевести в код... начинаем трейлинг когда цена будет уже в безубытке
Если бид выше открытия ордера + шаг трейлинга и бид выше стоплосса + шаг трейлинга тогда модифай ордер.

if(Bid > OrderOpenPrice() + (StopLoss+TralingStep)*_Point && Bid >= OrderStopLoss() + (StopLoss+TralingStep)*_Point) OrderModify(тикет, цена, Bid - StopLoss*_Point, тейк, 0, цвет);

Таким образом первая модификация будет только если будет выполнена первая часть условия и будет повторяться только когда будет выполнена вторая часть условия. Но если до трейлинга стопы не ставились тогда в этом условии надо предусмотреть и такой вариант

if(Bid > OrderOpenPrice() + (StopLoss+TralingStep)*_Point && (Bid >= OrderStopLoss() + (StopLoss+TralingStep)*_Point || OrderStopLoss() == 0)) OrderModify(тикет, цена, Bid - StopLoss*_Point, тейк, 0, цвет);
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Milord (18.01.2015)
Старый 18.01.2015, 08:42   #3423 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Сообщение от Milord Посмотреть сообщение
уважаемые профи проггеры MQL4, помогите плиз найти ошибку в коде трала, не работает он у меня, цепляю как обычно к советнику, и он у мня не работает, гляньте свежим взглядом что в коде неверно, или лишнее может, брал его из готового советника... мне нужен код в старом билде, например 229, новый пока не освоил, извиняйте, разрабы слишком быстро все меняют, не успеваю гнаться за ними...
ЗАРАНЕЕ СПАСИБО!

PHP код:
//-----------------------------------------------------------------
void Tral()
{
  for(
int i=0i<OrdersTotal(); i++) { 
    if(!(
OrderSelect(iSELECT_BY_POSMODE_TRADES))) continue; 
    if(
OrderSymbol() != Symbol()) continue;        

    if(
OrderType()==OP_BUY) { 
      if(
Bid-OrderOpenPrice()>TrailingStop*Point&&Bid>=OrderOpenPrice()+TrailingStart*Point) { 
        if(
OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point
          
OrderModify(OrderTicket(), OrderOpenPrice(),Bid-TrailingStop*PointOrderTakeProfit(), 0CLR_NONE); 
      } 
    } 

   if(
OrderType()==OP_SELL) { 
     if(
OrderOpenPrice()-Ask>TrailingStop*Point&& Ask<=OrderOpenPrice()-TrailingStart*Point) { 
        if(
OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point
         
OrderModify(OrderTicket(), OrderOpenPrice(),Ask+TrailingStop*PointOrderTakeProfit(), 0CLR_NONE); 
      }
    } 
  } 
  
}
//------------------------------------------------ 
Вы по кругу ходите? Снова трал не можете сделать.

Скрытый текст

Код:
   if(BreakevenStart > 0)
   {
      double stopLossGridBr;
      if(pos.type == ENTER_BUY)
         if(Bid - pos.price > BreakevenStart * _Point && pos.sl == 0)
         {
            stopLossGridBr = NormalizeDouble(pos.price + BreakevenProfit * _Point, Digits);
            for (i = 0; i < k; i++)
               if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                  if(OrderSymbol() == _Symbol)
                     if (OrderMagicNumber() == magicNumber)
                        if(OrderType() == OP_BUY)
                        {
                           if(OrderStopLoss() < stopLossGridBr || OrderStopLoss() == 0)
                              ModifyOrder(-1, stopLossGridBr, -1, clrNONE);
                        }
         }
      if(pos.type == ENTER_SELL)
         if(pos.price - Ask > BreakevenStart * _Point && pos.sl == 0)
         {
            stopLossGridBr = NormalizeDouble(pos.price - BreakevenProfit * _Point, Digits);
            for (i = 0; i < k; i++)
               if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                  if(OrderSymbol() == _Symbol)
                     if (OrderMagicNumber() == magicNumber)
                        if(OrderType() == OP_SELL)
                        {
                           if(OrderStopLoss() > stopLossGridBr || OrderStopLoss() == 0)
                              ModifyOrder(-1, stopLossGridBr, -1, clrNONE);
                        }
         }
   }
   
   if(TrailingStart > 0)
   {
      double stopLossGridTr;
      if(pos.type == ENTER_BUY)
         if(Bid - pos.price > TrailingStart * _Point)
            if((pos.sl < Bid - (TrailingStop + TrailingStep - 1) * _Point) || pos.sl == 0)
            {
               stopLossGridTr = NormalizeDouble(Bid - TrailingStop * _Point, Digits);
               for (i = 0; i < k; i++)
               if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                  if(OrderSymbol() == _Symbol)
                     if (OrderMagicNumber() == magicNumber)
                        if(OrderType() == OP_BUY)
                        {
                           if(OrderStopLoss() < stopLossGridTr || OrderStopLoss() == 0)
                              ModifyOrder(-1, stopLossGridTr, -1, clrNONE);
                        }
            }
      if(pos.type == ENTER_SELL)
         if(pos.price - Ask > TrailingStart * _Point)
            if((pos.sl > Ask + (TrailingStop + TrailingStep - 1) * _Point) || pos.sl == 0)
            {
               stopLossGridTr = NormalizeDouble(Ask + TrailingStop * _Point, Digits);
               for (i = 0; i < k; i++)
               if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                  if(OrderSymbol() == _Symbol)
                     if (OrderMagicNumber() == magicNumber)
                        if(OrderType() == OP_SELL)
                        {
                           if(OrderStopLoss() > stopLossGridTr || OrderStopLoss() == 0)
                              ModifyOrder(-1, stopLossGridTr, -1, clrNONE);
                        }
            }
      
      // Трал отложеных ордеров
      if(pos.total_orders > 0)
         for(i = 0; i < k; i++)
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
               if(OrderSymbol() == _Symbol)
                  if(OrderMagicNumber() == pos.magic)
                     if(OrderType() > 1 && OrderType() < 6)
                     {
                        if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT)
                           if(OrderOpenPrice() - Close[0] > (distanceOrder + TrailingStep - 1) * _Point)
                              ModifyOrder(NormalizeDouble(Close[0] + distanceOrder * _Point, Digits), 0, 0, clrNONE);
                        
                        if(OrderType() == OP_SELLSTOP || OrderType() == OP_BUYLIMIT)
                           if(Close[0] - OrderOpenPrice() > (distanceOrder + TrailingStep - 1) * _Point)
                              ModifyOrder(NormalizeDouble(Close[0] - distanceOrder * _Point, Digits), 0, 0, clrNONE);
                     }
   }
[свернуть]
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 18.01.2015, 20:51   #3424 (permalink)
Местный знаток
 
Аватар для gince
 
Регистрация: 09.09.2008
Адрес: Литва
Сообщений: 396
Репутация: 733
gince - gince - gince - gince - gince - gince - gince -
Сказал(а) спасибо: 178
Поблагодарили 733 раз(а) в 189 сообщениях
Поинты: 192
Отправить сообщение для gince с помощью Skype™
Помогите ребята. Где то прокололся с индексацией масива. Ошибка на 199 строке

2015.01.18 22:45:08.796 array out of range in 'MA Chanel Arrows.mq4' (199,22)

if(Up1Buffer[i+2]. И все дальше индексы будут ошибочными.Где я ошибаюсь ?

Скрытый текст

//+------------------------------------------------------------------+
//| MA Chanel Arrows.mq4 |
//| Skype Gintaras2604 |
//| gintaraitis@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Skype Gintaras2604"
#property link "gintaraitis@gmail.com"
#property version "1.00"

#property strict

#property indicator_chart_window

#property indicator_buffers 12
#property indicator_plots 12
//--- plot Up1
#property indicator_label1 "Up1"
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrLightGreen
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot Up2
#property indicator_label2 "Up2"
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrLightGreen
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- plot Up3
#property indicator_label3 "Up3"
#property indicator_type3 DRAW_LINE
#property indicator_color3 clrLightGreen
#property indicator_style3 STYLE_SOLID
#property indicator_width3 1
//--- plot Dn1
#property indicator_label4 "Dn1"
#property indicator_type4 DRAW_LINE
#property indicator_color4 clrDarkSalmon
#property indicator_style4 STYLE_SOLID
#property indicator_width4 1
//--- plot Dn2
#property indicator_label5 "Dn2"
#property indicator_type5 DRAW_LINE
#property indicator_color5 clrDarkSalmon
#property indicator_style5 STYLE_SOLID
#property indicator_width5 1
//--- plot Dn3
#property indicator_label6 "Dn3"
#property indicator_type6 DRAW_LINE
#property indicator_color6 clrDarkSalmon
#property indicator_style6 STYLE_SOLID
#property indicator_width6 1
//--- plot UpArrow
#property indicator_label7 "UpArrow1"
#property indicator_type7 DRAW_ARROW
#property indicator_color7 clrOliveDrab
#property indicator_style7 STYLE_SOLID
#property indicator_width7 1
//--- plot DnArrow
#property indicator_label8 "DnArrow1"
#property indicator_type8 DRAW_ARROW
#property indicator_color8 clrFireBrick
#property indicator_style8 STYLE_SOLID
#property indicator_width8 1
//--- plot UpArrow
#property indicator_label9 "UpArrow2"
#property indicator_type9 DRAW_ARROW
#property indicator_color9 clrOliveDrab
#property indicator_style9 STYLE_SOLID
#property indicator_width9 2
//--- plot DnArrow
#property indicator_label10 "DnArrow2"
#property indicator_type10 DRAW_ARROW
#property indicator_color10 clrFireBrick
#property indicator_style10 STYLE_SOLID
#property indicator_width10 2
//--- plot UpArrow
#property indicator_label11 "UpArrow3"
#property indicator_type11 DRAW_ARROW
#property indicator_color11 clrOliveDrab
#property indicator_style11 STYLE_SOLID
#property indicator_width11 3
//--- plot DnArrow
#property indicator_label12 "DnArrow3"
#property indicator_type12 DRAW_ARROW
#property indicator_color12 clrFireBrick
#property indicator_style12 STYLE_SOLID
#property indicator_width12 3
//--- input parameters
input int MA_Per =9;
input int MA_Method =2;
input int MA_Price =0;
input double MA_Y1_shift =74.6;
input double MA_Y2_shift =131.8;
input double MA_Y3_shift =200;

input double v_shift1 =5;
input double v_shift2 =10;
input double v_shift3 =15;

//--- indicator buffers
double Up1Buffer[];
double Up2Buffer[];
double Up3Buffer[];

double Dn1Buffer[];
double Dn2Buffer[];
double Dn3Buffer[];

double UpArrowBuffer1[];
double DnArrowBuffer1[];
double UpArrowBuffer2[];
double DnArrowBuffer2[];
double UpArrowBuffer3[];
double DnArrowBuffer3[];

double MaBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,Up1Buffer);
SetIndexBuffer(1,Up2Buffer);
SetIndexBuffer(2,Up3Buffer);
SetIndexBuffer(3,Dn1Buffer);
SetIndexBuffer(4,Dn2Buffer);
SetIndexBuffer(5,Dn3Buffer);
SetIndexBuffer(6,UpArrowBuffer1);
SetIndexBuffer(7,DnArrowBuffer1);
SetIndexBuffer(8,UpArrowBuffer2);
SetIndexBuffer(9,DnArrowBuffer2);
SetIndexBuffer(10,UpArrowBuffer3);
SetIndexBuffer(11,DnArrowBuffer3);

//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
PlotIndexSetInteger(4,PLOT_ARROW,241);
PlotIndexSetInteger(5,PLOT_ARROW,242);

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
int counted_bars=IndicatorCounted();

int limit;
limit=Bars-counted_bars;

/*
ArraySetAsSeries(Up1Buffer,true);
ArraySetAsSeries(Up2Buffer,true);
ArraySetAsSeries(Up3Buffer,true);

ArraySetAsSeries(Dn1Buffer,true);
ArraySetAsSeries(Dn2Buffer,true);
ArraySetAsSeries(Dn3Buffer,true);

ArraySetAsSeries(UpArrowBuffer1,true);
ArraySetAsSeries(DnArrowBuffer1,true);
ArraySetAsSeries(UpArrowBuffer2,true);
ArraySetAsSeries(DnArrowBuffer2,true);
ArraySetAsSeries(UpArrowBuffer3,true);
ArraySetAsSeries(DnArrowBuffer3,true);
*/
for(int i=0;i<limit;i++)
{

Up1Buffer[i]= MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up2Buffer[i]= MA_Y2_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up3Buffer[i]= MA_Y3_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);

Dn1Buffer[i]=-MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Dn2Buffer[i]=-MA_Y2_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Dn3Buffer[i]=-MA_Y3_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
}
for(int i=0;i<limit;i++)
{
UpArrowBuffer1[i]=EMPTY_VALUE;
DnArrowBuffer1[i]=EMPTY_VALUE;
UpArrowBuffer2[i]=EMPTY_VALUE;
DnArrowBuffer2[i]=EMPTY_VALUE;
UpArrowBuffer3[i]=EMPTY_VALUE;
DnArrowBuffer3[i]=EMPTY_VALUE;

if(Up1Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer1[i]=v_shift1*Point+High[i];
if(Up2Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer2[i]=v_shift2*Point+High[i];
if(Up3Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer3[i]=v_shift3*Point+High[i];

if(Dn1Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer1[i]=v_shift1*Point-Low[i];
if(Dn2Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer2[i]=v_shift2*Point-Low[i];
if(Dn3Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer3[i]=v_shift3*Point-Low[i];

}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
[свернуть]

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Гинтарас
gince вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.01.2015, 03:46   #3425 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от AlexeyVik Посмотреть сообщение
И из-за этого такая истерика???
Никакой. Клиент неизлечим
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.01.2015, 06:20   #3426 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от gince Посмотреть сообщение
Помогите ребята. Где то прокололся с индексацией масива. Ошибка на 199 строке

2015.01.18 22:45:08.796 array out of range in 'MA Chanel Arrows.mq4' (199,22)

if(Up1Buffer[i+2]. И все дальше индексы будут ошибочными.Где я ошибаюсь ?

Скрытый текст

//+------------------------------------------------------------------+
//| MA Chanel Arrows.mq4 |
//| Skype Gintaras2604 |
//| gintaraitis@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Skype Gintaras2604"
#property link "gintaraitis@gmail.com"
#property version "1.00"

#property strict

#property indicator_chart_window

#property indicator_buffers 12
#property indicator_plots 12
//--- plot Up1
#property indicator_label1 "Up1"
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrLightGreen
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot Up2
#property indicator_label2 "Up2"
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrLightGreen
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- plot Up3
#property indicator_label3 "Up3"
#property indicator_type3 DRAW_LINE
#property indicator_color3 clrLightGreen
#property indicator_style3 STYLE_SOLID
#property indicator_width3 1
//--- plot Dn1
#property indicator_label4 "Dn1"
#property indicator_type4 DRAW_LINE
#property indicator_color4 clrDarkSalmon
#property indicator_style4 STYLE_SOLID
#property indicator_width4 1
//--- plot Dn2
#property indicator_label5 "Dn2"
#property indicator_type5 DRAW_LINE
#property indicator_color5 clrDarkSalmon
#property indicator_style5 STYLE_SOLID
#property indicator_width5 1
//--- plot Dn3
#property indicator_label6 "Dn3"
#property indicator_type6 DRAW_LINE
#property indicator_color6 clrDarkSalmon
#property indicator_style6 STYLE_SOLID
#property indicator_width6 1
//--- plot UpArrow
#property indicator_label7 "UpArrow1"
#property indicator_type7 DRAW_ARROW
#property indicator_color7 clrOliveDrab
#property indicator_style7 STYLE_SOLID
#property indicator_width7 1
//--- plot DnArrow
#property indicator_label8 "DnArrow1"
#property indicator_type8 DRAW_ARROW
#property indicator_color8 clrFireBrick
#property indicator_style8 STYLE_SOLID
#property indicator_width8 1
//--- plot UpArrow
#property indicator_label9 "UpArrow2"
#property indicator_type9 DRAW_ARROW
#property indicator_color9 clrOliveDrab
#property indicator_style9 STYLE_SOLID
#property indicator_width9 2
//--- plot DnArrow
#property indicator_label10 "DnArrow2"
#property indicator_type10 DRAW_ARROW
#property indicator_color10 clrFireBrick
#property indicator_style10 STYLE_SOLID
#property indicator_width10 2
//--- plot UpArrow
#property indicator_label11 "UpArrow3"
#property indicator_type11 DRAW_ARROW
#property indicator_color11 clrOliveDrab
#property indicator_style11 STYLE_SOLID
#property indicator_width11 3
//--- plot DnArrow
#property indicator_label12 "DnArrow3"
#property indicator_type12 DRAW_ARROW
#property indicator_color12 clrFireBrick
#property indicator_style12 STYLE_SOLID
#property indicator_width12 3
//--- input parameters
input int MA_Per =9;
input int MA_Method =2;
input int MA_Price =0;
input double MA_Y1_shift =74.6;
input double MA_Y2_shift =131.8;
input double MA_Y3_shift =200;

input double v_shift1 =5;
input double v_shift2 =10;
input double v_shift3 =15;

//--- indicator buffers
double Up1Buffer[];
double Up2Buffer[];
double Up3Buffer[];

double Dn1Buffer[];
double Dn2Buffer[];
double Dn3Buffer[];

double UpArrowBuffer1[];
double DnArrowBuffer1[];
double UpArrowBuffer2[];
double DnArrowBuffer2[];
double UpArrowBuffer3[];
double DnArrowBuffer3[];

double MaBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,Up1Buffer);
SetIndexBuffer(1,Up2Buffer);
SetIndexBuffer(2,Up3Buffer);
SetIndexBuffer(3,Dn1Buffer);
SetIndexBuffer(4,Dn2Buffer);
SetIndexBuffer(5,Dn3Buffer);
SetIndexBuffer(6,UpArrowBuffer1);
SetIndexBuffer(7,DnArrowBuffer1);
SetIndexBuffer(8,UpArrowBuffer2);
SetIndexBuffer(9,DnArrowBuffer2);
SetIndexBuffer(10,UpArrowBuffer3);
SetIndexBuffer(11,DnArrowBuffer3);

//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
PlotIndexSetInteger(4,PLOT_ARROW,241);
PlotIndexSetInteger(5,PLOT_ARROW,242);

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
int counted_bars=IndicatorCounted();

int limit;
limit=Bars-counted_bars;

/*
ArraySetAsSeries(Up1Buffer,true);
ArraySetAsSeries(Up2Buffer,true);
ArraySetAsSeries(Up3Buffer,true);

ArraySetAsSeries(Dn1Buffer,true);
ArraySetAsSeries(Dn2Buffer,true);
ArraySetAsSeries(Dn3Buffer,true);

ArraySetAsSeries(UpArrowBuffer1,true);
ArraySetAsSeries(DnArrowBuffer1,true);
ArraySetAsSeries(UpArrowBuffer2,true);
ArraySetAsSeries(DnArrowBuffer2,true);
ArraySetAsSeries(UpArrowBuffer3,true);
ArraySetAsSeries(DnArrowBuffer3,true);
*/
for(int i=0;i<limit;i++)
{

Up1Buffer[i]= MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up2Buffer[i]= MA_Y2_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up3Buffer[i]= MA_Y3_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);

Dn1Buffer[i]=-MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Dn2Buffer[i]=-MA_Y2_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Dn3Buffer[i]=-MA_Y3_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
}
for(int i=0;i<limit;i++)
{
UpArrowBuffer1[i]=EMPTY_VALUE;
DnArrowBuffer1[i]=EMPTY_VALUE;
UpArrowBuffer2[i]=EMPTY_VALUE;
DnArrowBuffer2[i]=EMPTY_VALUE;
UpArrowBuffer3[i]=EMPTY_VALUE;
DnArrowBuffer3[i]=EMPTY_VALUE;

if(Up1Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer1[i]=v_shift1*Point+High[i];
if(Up2Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer2[i]=v_shift2*Point+High[i];
if(Up3Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer3[i]=v_shift3*Point+High[i];

if(Dn1Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer1[i]=v_shift1*Point-Low[i];
if(Dn2Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer2[i]=v_shift2*Point-Low[i];
if(Dn3Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer3[i]=v_shift3*Point-Low[i];

}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
[свернуть]
А это ты пишешь на mql5 или всё-же mql4?

Но независимо от этого индикатор отображаться не будет т.к. в буфер ты загоняешь
Up1Buffer[i]= MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
а это самое MA_Y1_shift уводит значение буфера выше верхней границы графика.
input double MA_Y1_shift =74.6;

Ну да ладно, с этим сам разберёшься. А насчёт конкретного вопроса, у меня нет желания разбираться как победить эту проблему имеено с таким направлением цикла for(int i=0;i<limit;i++)
Но если не возражаешь поменять то вот часть кода которую надо исправить
Код:
int i, limit;
limit = rates_total - prev_calculated;

/*

*/
for(i = limit; i >= 0; i--)
{
   if(rates_total-i < MA_Per) continue;
Up1Buffer[i]= MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
и ещё ниже один цикл for(i = limit; i >= 0; i--)
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gince (19.01.2015)
Старый 19.01.2015, 12:19   #3427 (permalink)
Интересующийся
 
Аватар для Iglob
 
Регистрация: 27.06.2011
Сообщений: 3
Репутация: 1
Iglob
Сказал(а) спасибо: 11
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Здравствуйте! Подскажите, пожалуйста, в чем тут ошибка?
Миниатюры:
Нажмите на изображение для увеличения
Название: ошибка.jpg
Просмотров: 10
Размер:	11.3 Кб
ID:	192886   Нажмите на изображение для увеличения
Название: ош2.jpg
Просмотров: 12
Размер:	71.6 Кб
ID:	192887  
Iglob вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.01.2015, 15:02   #3428 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Сообщение от Iglob Посмотреть сообщение
Здравствуйте! Подскажите, пожалуйста, в чем тут ошибка?
Как-то так:
Цитата:
Проблема заключается в том, что нельзя изменить количество элементов массива во втором измерении и выше. Их всегда нужно указывать на этапе компиляции программы.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.01.2015, 15:39   #3429 (permalink)
Прохожий
 
Аватар для AlexGud
 
Регистрация: 16.01.2015
Сообщений: 2
Репутация: 1
AlexGud
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 6
Здравствуйте,
проблема, у меня значение chin=iIchimoku(NULL,0,9,26,52, MODE_CHINKOUSPAN,1); выдает 0, хотя график рисует эту кривую, это глюк у меня или в MetaEditor? Причем все другие параметры выдает правильно
AlexGud вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.01.2015, 23:50   #3430 (permalink)
Местный житель
 
Аватар для DIW35902345
 
Регистрация: 12.10.2013
Сообщений: 292
Репутация: 253
DIW35902345 DIW35902345 DIW35902345
Сказал(а) спасибо: 115
Поблагодарили 254 раз(а) в 92 сообщениях
Поинты: 92
Друзья помогите !!!

Подскажите кто нибудь ..., нужно ограничить советник в количестве открываемых ордеров , в интернете почитал , есть такие выдержки -

1.1. При открытии каждого ордера прибавлять в статическую переменную единичку.
2. Сравнивать эту переменную с количеством разрешенных ордеров в день.
3. Если кол ордеров открытых = количеству запрещенных в день то запрещает открывать ордеры.
4. Делаем проверку по дате если дата изменилась обнуляем статический параметр (увеличивающийся с количеством открытых ордеров)


2. А можно поступить ещё грамотнее - проверить по дате открытия в списке открытых и закрытых ордеров...


Второй вариант более предпочтительней .... Други , помогите с функцией перебора по ордерам истории ( и открытых уже ордеров ) с запросом времени и сравнения , заранее спасибо ( если можно в примере кода или ссыслкой на источник поделитесь )

Последний раз редактировалось DIW35902345; 19.01.2015 в 23:53.
DIW35902345 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 03:40   #3431 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Сообщение от DIW35902345 Посмотреть сообщение
Второй вариант более предпочтительней .... Други , помогите с функцией перебора по ордерам истории ( и открытых уже ордеров ) с запросом времени и сравнения , заранее спасибо ( если можно в примере кода или ссыслкой на источник поделитесь )
_http://forum.mql4.com/ru/38949/page5#434244
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
DIW35902345 (20.01.2015)
Старый 20.01.2015, 08:53   #3432 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от DIW35902345 Посмотреть сообщение
Друзья помогите !!!

Подскажите кто нибудь ..., нужно ограничить советник в количестве открываемых ордеров , в интернете почитал , есть такие выдержки -

1.1. При открытии каждого ордера прибавлять в статическую переменную единичку.
2. Сравнивать эту переменную с количеством разрешенных ордеров в день.
3. Если кол ордеров открытых = количеству запрещенных в день то запрещает открывать ордеры.
4. Делаем проверку по дате если дата изменилась обнуляем статический параметр (увеличивающийся с количеством открытых ордеров)


2. А можно поступить ещё грамотнее - проверить по дате открытия в списке открытых и закрытых ордеров...


Второй вариант более предпочтительней .... Други , помогите с функцией перебора по ордерам истории ( и открытых уже ордеров ) с запросом времени и сравнения , заранее спасибо ( если можно в примере кода или ссыслкой на источник поделитесь )
Цитата:
Подскажите кто нибудь ..., нужно ограничить советник в количестве открываемых ордеров ....
Ограничение по сигналу на торговлю, или просто ограничить количество? (чтобы "пачка" не открывалась.)
_SERG_ вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 09:06   #3433 (permalink)
Местный житель
 
Аватар для DIW35902345
 
Регистрация: 12.10.2013
Сообщений: 292
Репутация: 253
DIW35902345 DIW35902345 DIW35902345
Сказал(а) спасибо: 115
Поблагодарили 254 раз(а) в 92 сообщениях
Поинты: 92
Сообщение от _SERG_ Посмотреть сообщение
Ограничение по сигналу на торговлю, или просто ограничить количество? (чтобы "пачка" не открывалась.)

Стоп ,стоп .., при чем тут сигналы .., сигналы от индикатора поступают независимо от чего-то нибыло ... я говорю о ордерах .., скажу проще- есть внешняя переменная - ( ну скажем ) extern int Clock_Order= 5;

эта переменная должна, ограничевать количество ордеров в день ( т.е --- просмотреть историю за день , сделать выборку ..., потом отминусовать от внешней переменной = количество открываемых ордеров .. т.е в день не больше 5 ордеров

Последний раз редактировалось DIW35902345; 20.01.2015 в 09:08.
DIW35902345 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 10:32   #3434 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от DIW35902345 Посмотреть сообщение
Стоп ,стоп .., при чем тут сигналы .., сигналы от индикатора поступают независимо от чего-то нибыло ... я говорю о ордерах .., скажу проще- есть внешняя переменная - ( ну скажем ) extern int Clock_Order= 5;

эта переменная должна, ограничевать количество ордеров в день ( т.е --- просмотреть историю за день , сделать выборку ..., потом отминусовать от внешней переменной = количество открываемых ордеров .. т.е в день не больше 5 ордеров
Сигналы могут поступать не только от индикаторов, но сейчас не об этом, и держаться на протяжении нескольких котировок, или повториться через несколько котировок, т.е. Откроется "пучёк" ордеров по близким ценам, но не больше чем задано в переменной. А вообще дело хозяйское.
_SERG_ вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 10:41   #3435 (permalink)
Местный житель
 
Аватар для DIW35902345
 
Регистрация: 12.10.2013
Сообщений: 292
Репутация: 253
DIW35902345 DIW35902345 DIW35902345
Сказал(а) спасибо: 115
Поблагодарили 254 раз(а) в 92 сообщениях
Поинты: 92
Сообщение от _SERG_ Посмотреть сообщение
Сигналы могут поступать не только от индикаторов, но сейчас не об этом, и держаться на протяжении нескольких котировок, или повториться через несколько котировок, т.е. Откроется "пучёк" ордеров по близким ценам, но не больше чем задано в переменной. А вообще дело хозяйское.
пучок ордеров я уже отмел , там функция ....кстати , на форуме взял - код функции , чтобы ордер на свечке открывался только один


пока это выглядит вот так .., это только начало


int Time_Count ()
{
int data_sell = 0;
int data_buy = 0;

int history_order = OrdersHistoryTotal();

for(int trade=OrdersHistoryTotal()-1 ; trade >= 0 ; trade --) //
{
OrderSelect(trade, SELECT_BY_TICKET ,MODE_HISTORY ); // выбирает ордер для работы

if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType()==OP_SELL)
{ ....
.....
.....


дальше как я понимаю , нужно сравнить дату каждого закрытого ордера в истории с текущей

ps / я не делаю правильно ( наверное ) . ., я делаю так ,как понимаю ..
есть конструктивные предложения ?
например как сравнить даты ?

Последний раз редактировалось DIW35902345; 20.01.2015 в 11:35.
DIW35902345 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 12:39   #3436 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от DIW35902345 Посмотреть сообщение
пучок ордеров я уже отмел , там функция ....кстати , на форуме взял - код функции , чтобы ордер на свечке открывался только один


пока это выглядит вот так .., это только начало


int Time_Count ()
{
int data_sell = 0;
int data_buy = 0;

int history_order = OrdersHistoryTotal();

for(int trade=OrdersHistoryTotal()-1 ; trade >= 0 ; trade --) //
{
OrderSelect(trade, SELECT_BY_TICKET ,MODE_HISTORY ); // выбирает ордер для работы

if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType()==OP_SELL)
{ ....
.....
.....


дальше как я понимаю , нужно сравнить дату каждого закрытого ордера в истории с текущей

ps / я не делаю правильно ( наверное ) . ., я делаю так ,как понимаю ..
есть конструктивные предложения ?
например как сравнить даты ?
Какие именно даты необходимо сравнивать? Текущую с датой закрытия ордера?
_SERG_ вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 14:04   #3437 (permalink)
Местный житель
 
Аватар для DIW35902345
 
Регистрация: 12.10.2013
Сообщений: 292
Репутация: 253
DIW35902345 DIW35902345 DIW35902345
Сказал(а) спасибо: 115
Поблагодарили 254 раз(а) в 92 сообщениях
Поинты: 92
Сообщение от _SERG_ Посмотреть сообщение
Какие именно даты необходимо сравнивать? Текущую с датой закрытия ордера?
Да , именно
DIW35902345 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 16:15   #3438 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от DIW35902345 Посмотреть сообщение
Да , именно
if (Year() == TimeYear(OrderCloseTime()) && DayOfYear()==TimeDayOfYear(OrderCloseTime())) {...}

Дет так. Тебеж за день нужно.

Последний раз редактировалось _SERG_; 20.01.2015 в 16:34.
_SERG_ вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 17:03   #3439 (permalink)
Активный участник
 
Аватар для digaysasha
 
Регистрация: 01.02.2010
Сообщений: 157
Репутация: 47
digaysasha
Сказал(а) спасибо: 26
Поблагодарили 46 раз(а) в 27 сообщениях
Поинты: 56
Добрый день! Подскажите как сделать что бы советник не открывал заданного количества ордеров, например MaxTrades=10
digaysasha вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.01.2015, 19:22   #3440 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от digaysasha Посмотреть сообщение
Добрый день! Подскажите как сделать что бы советник не открывал заданного количества ордеров, например MaxTrades=10
Ну ты спросил! Сам-то понял? А какое число ордеров он должен открывать, не заданное?

Последний раз редактировалось _SERG_; 20.01.2015 в 19:25.
_SERG_ вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 05:59. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO