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

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

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

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


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


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

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

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

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


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


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

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

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

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

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


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


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.
20.01.2015, 12:39
Аватар для _SERG_
_SERG_ _SERG_ на форуме Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
пучок ордеров я уже отмел , там функция ....кстати , на форуме взял - код функции , чтобы ордер на свечке открывался только один


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


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

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

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

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

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


Опции темы

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

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



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


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