Ответ
 
Опции темы
18.01.2015, 06:49
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от ansol Посмотреть сообщение
Я, возможно, неудачно выразился, тогда уточню/поправлюсь:
Данная конструкция будет работать безо вских "=="
Если интересует значение true, то пишем
if(OrderModify(...))
Если false, то
if(!OrderModify(...))
А идиотская конструкция if(OrderModify == true или false) не нужна.
Так понятней?
И из-за этого такая истерика???
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
18.01.2015, 07:14
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от 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
Аватар для matro3
matro3 Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Сообщение от 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
Аватар для gince
gince Местный знаток
Регистрация: 09.09.2008 / Адрес: Литва / Сообщений: 427
Поблагодарили 783 раз(а) / Репутация: 783
  • Отправить сообщение для 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
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
Сообщение от AlexeyVik Посмотреть сообщение
И из-за этого такая истерика???
Никакой. Клиент неизлечим
ansol вне форума Ответить с цитированиемОтветить с цитированием  
19.01.2015, 06:20
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от 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
Аватар для Iglob
Iglob Интересующийся
Регистрация: 27.06.2011 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
Здравствуйте! Подскажите, пожалуйста, в чем тут ошибка?
Миниатюры:
Нажмите на изображение для увеличения
Название: ошибка.jpg
Просмотров: 10
Размер:	11.3 Кб
ID:	192886   Нажмите на изображение для увеличения
Название: ош2.jpg
Просмотров: 12
Размер:	71.6 Кб
ID:	192887  
Iglob вне форума Ответить с цитированиемОтветить с цитированием  
19.01.2015, 15:02
Аватар для matro3
matro3 Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Сообщение от Iglob Посмотреть сообщение
Здравствуйте! Подскажите, пожалуйста, в чем тут ошибка?
Как-то так:
Цитата:
Проблема заключается в том, что нельзя изменить количество элементов массива во втором измерении и выше. Их всегда нужно указывать на этапе компиляции программы.
matro3 вне форума Ответить с цитированиемОтветить с цитированием  
19.01.2015, 15:39
Аватар для AlexGud
AlexGud Прохожий
Регистрация: 16.01.2015 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
Здравствуйте,
проблема, у меня значение chin=iIchimoku(NULL,0,9,26,52, MODE_CHINKOUSPAN,1); выдает 0, хотя график рисует эту кривую, это глюк у меня или в MetaEditor? Причем все другие параметры выдает правильно
AlexGud вне форума Ответить с цитированиемОтветить с цитированием  
19.01.2015, 23:50
Аватар для DIW35902345
DIW35902345 Местный житель
Регистрация: 12.10.2013 / Сообщений: 292
Поблагодарили 254 раз(а) / Репутация: 253
Друзья помогите !!!

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

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


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


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

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

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

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


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


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

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

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

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

эта переменная должна, ограничевать количество ордеров в день ( т.е --- просмотреть историю за день , сделать выборку ..., потом отминусовать от внешней переменной = количество открываемых ордеров .. т.е в день не больше 5 ордеров
Сигналы могут поступать не только от индикаторов, но сейчас не об этом, и держаться на протяжении нескольких котировок, или повториться через несколько котировок, т.е. Откроется "пучёк" ордеров по близким ценам, но не больше чем задано в переменной. А вообще дело хозяйское.
_SERG_ вне форума Ответить с цитированиемОтветить с цитированием  
20.01.2015, 10:41
Аватар для DIW35902345
DIW35902345 Местный житель
Регистрация: 12.10.2013 / Сообщений: 292
Поблагодарили 254 раз(а) / Репутация: 253
Сообщение от _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
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от 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
Аватар для DIW35902345
DIW35902345 Местный житель
Регистрация: 12.10.2013 / Сообщений: 292
Поблагодарили 254 раз(а) / Репутация: 253
Сообщение от _SERG_ Посмотреть сообщение
Какие именно даты необходимо сравнивать? Текущую с датой закрытия ордера?
Да , именно
DIW35902345 вне форума Ответить с цитированиемОтветить с цитированием  
20.01.2015, 16:15
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от DIW35902345 Посмотреть сообщение
Да , именно
if (Year() == TimeYear(OrderCloseTime()) && DayOfYear()==TimeDayOfYear(OrderCloseTime())) {...}

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

Последний раз редактировалось _SERG_; 20.01.2015 в 16:34.
_SERG_ вне форума Ответить с цитированиемОтветить с цитированием  
20.01.2015, 17:03
Аватар для digaysasha
digaysasha Активный участник
Регистрация: 01.02.2010 / Сообщений: 158
Поблагодарили 46 раз(а) / Репутация: 47
Добрый день! Подскажите как сделать что бы советник не открывал заданного количества ордеров, например MaxTrades=10
digaysasha вне форума Ответить с цитированиемОтветить с цитированием  
20.01.2015, 19:22
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от digaysasha Посмотреть сообщение
Добрый день! Подскажите как сделать что бы советник не открывал заданного количества ордеров, например MaxTrades=10
Ну ты спросил! Сам-то понял? А какое число ордеров он должен открывать, не заданное?

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

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


Опции темы

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

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



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


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