Ваши вопросы по языку MQL4

AlexeyVik

Программист mql4 mql5
Я, возможно, неудачно выразился, тогда уточню/поправлюсь:
Данная конструкция будет работать безо вских "=="
Если интересует значение true, то пишем
if(OrderModify(...))
Если false, то
if(!OrderModify(...))
А идиотская конструкция if(OrderModify == true или false) не нужна.
Так понятней?
И из-за этого такая истерика???
 

AlexeyVik

Программист mql4 mql5
давайте разберем ошибки кода хотя бы без проверок на ошибки, чтобы было понятнее, у мня вопрос - зачем сравнивать как вы пишете
if(Bid-OrderStopLoss>TrailigStart*Point)

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

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, цвет);
 

matro3

Почетный гражданин
уважаемые профи проггеры MQL4, помогите плиз найти ошибку в коде трала, не работает он у меня:facepalm:, цепляю как обычно к советнику, и он у мня не работает, гляньте свежим взглядом что в коде неверно, или лишнее может, брал его из готового советника... мне нужен код в старом билде, например 229, новый пока не освоил, извиняйте, разрабы слишком быстро все меняют, не успеваю гнаться за ними...
ЗАРАНЕЕ СПАСИБО!

PHP:
//-----------------------------------------------------------------
void Tral()
{
  for(int i=0; i<OrdersTotal(); i++) { 
    if(!(OrderSelect(i, SELECT_BY_POS, MODE_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*Point, OrderTakeProfit(), 0, CLR_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*Point, OrderTakeProfit(), 0, CLR_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);
                     }
   }
 

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 |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Skype Gintaras2604"
#property link "[email protected]"
#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= MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up2Buffer= MA_Y2_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up3Buffer= MA_Y3_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);

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

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

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

}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
 

AlexeyVik

Программист mql4 mql5
Помогите ребята. Где то прокололся с индексацией масива. Ошибка на 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 |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Skype Gintaras2604"
#property link "[email protected]"
#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= MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up2Buffer= MA_Y2_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up3Buffer= MA_Y3_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);

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

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

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

}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+

А это ты пишешь на mql5 или всё-же mql4?

Но независимо от этого индикатор отображаться не будет т.к. в буфер ты загоняешь
Up1Buffer= 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++)
Но если не возражаешь поменять то вот часть кода которую надо исправить
Код:
[COLOR=Red][B]int i, limit;
limit = rates_total - prev_calculated;[/B]
[/COLOR]
/*

*/
[COLOR=Red][B]for(i = limit; i >= 0; i--)[/B][/COLOR]
{
   [COLOR=Red][B]if(rates_total-i < MA_Per) continue;[/B][/COLOR]
Up1Buffer[i]= MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
и ещё ниже один цикл for(i = limit; i >= 0; i--)
 

Iglob

Прохожий
Здравствуйте! Подскажите, пожалуйста, в чем тут ошибка?
 

Вложения

  • ошибка.jpg
    ошибка.jpg
    11,3 КБ · Просмотры: 19
  • ош2.jpg
    ош2.jpg
    71,6 КБ · Просмотры: 20

matro3

Почетный гражданин
Здравствуйте! Подскажите, пожалуйста, в чем тут ошибка?
Как-то так:
Проблема заключается в том, что нельзя изменить количество элементов массива во втором измерении и выше. Их всегда нужно указывать на этапе компиляции программы.
 

AlexGud

Прохожий
Здравствуйте,
проблема, у меня значение chin=iIchimoku(NULL,0,9,26,52, MODE_CHINKOUSPAN,1); выдает 0, хотя график рисует эту кривую, это глюк у меня или в MetaEditor? Причем все другие параметры выдает правильно
 

DIW35902345

Местный житель
Друзья помогите !!!

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

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


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


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

matro3

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

_http://forum.mql4.com/ru/38949/page5#434244
 

_SERG_

Активный участник
Друзья помогите !!!

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

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


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


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

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

Ограничение по сигналу на торговлю, или просто ограничить количество? (чтобы "пачка" не открывалась.)
 

DIW35902345

Местный житель
Ограничение по сигналу на торговлю, или просто ограничить количество? (чтобы "пачка" не открывалась.)


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

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

_SERG_

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

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

Сигналы могут поступать не только от индикаторов, но сейчас не об этом, и держаться на протяжении нескольких котировок, или повториться через несколько котировок, т.е. Откроется "пучёк" ордеров по близким ценам, но не больше чем задано в переменной. А вообще дело хозяйское.
 

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_

Активный участник
пучок ордеров я уже отмел , там функция ....кстати , на форуме взял - код функции , чтобы ордер на свечке открывался только один


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


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 / я не делаю правильно ( наверное ) . ., я делаю так ,как понимаю ..
есть конструктивные предложения ?
например как сравнить даты ?

Какие именно даты необходимо сравнивать? Текущую с датой закрытия ордера?
 

digaysasha

Активный участник
Добрый день! Подскажите как сделать что бы советник не открывал заданного количества ордеров, например MaxTrades=10
 

_SERG_

Активный участник
Добрый день! Подскажите как сделать что бы советник не открывал заданного количества ордеров, например MaxTrades=10

Ну ты спросил! Сам-то понял? А какое число ордеров он должен открывать, не заданное?
 
Последнее редактирование:
Верх