[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 418

 
sss2019:


Спасибо. Значит периоду M1 соответствует значение 1, а периоду M5 соответствует значение 5, то получается что периоду H1 соответствует значение 60, а периоду H4 - 240 верно?


да -

PERIOD_M1 1 1 минута
PERIOD_M5 5 5 минут
PERIOD_M15 15 15 минут
PERIOD_M30 30 30 минут
PERIOD_H1 60 1 час
PERIOD_H4 240 4 часа
PERIOD_D1 1440 1 день
PERIOD_W1 10080 1 неделя
PERIOD_MN1 43200 1 месяц
0 (ноль) 0 Период текущего графика

 

Здравствуйте!

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

Как мне кажется ошибка кроется где-то в этом месте

ExtVolumesBuffer[i]=dVolume;


потому как поле этой операции в массиве ExtVolumesBuffer ни чего не меняется.

Понимаю, что где то проявил криворукость но вот где ни как не пойму.

Заранее спасибо!

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_buffers 1
#property indicator_color1 Black
//---- indicator buffers
double ExtVolumesBuffer[];
double emaExtVolumesBuffer[];

//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
SetIndexBuffer(0,emaExtVolumesBuffer);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
//---- sets default precision format for indicators visualization
IndicatorDigits(0);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("emaVolumes");
SetIndexLabel(0,"emaVolumes");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int i,nLimit,nCountedBars;
//---- bars count that does not changed after last indicator launch.
nCountedBars=IndicatorCounted();
//---- last counted bar will be recounted
if(nCountedBars>0) nCountedBars--;
nLimit=Bars-nCountedBars;
//----
for(i=0; i<nLimit; i++)
{
double dVolume=Volume[i];
ExtVolumesBuffer[i]=dVolume;
emaExtVolumesBuffer[i]=iMAOnArray(ExtVolumesBuffer,0,10,0,MODE_EMA,i);

Print(Volume[i],Volume[i+1],Volume[i+2],Volume[i+3]);
Print(ExtVolumesBuffer[i],ExtVolumesBuffer[i+1],ExtVolumesBuffer[i+2],ExtVolumesBuffer[i+3]);
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
 
sss2019:


Спасибо. Значит периоду M1 соответствует значение 1, а периоду M5 соответствует значение 5, то получается что периоду H1 соответствует значение 60, а периоду H4 - 240 верно?

Мне нужно чтобы заработала вот эта конструкция, когда период M1 выбирается значение case 1 а когда период M15 выбираетсся значение case 15. Так будет работать, или нужно обязательно делать case 1 case 2 case 3 - по порядку?

int CurrentGrafPeriod ()
{
   
int Ba;
int GrafPeriod = Period();    
  switch(GrafPeriod)
    {
 
    case 1 :  Ba = 60; break;
    case 5 :  Ba = 12; break;
    case 15 : Ba = 4;  break;
    case 30 : Ba = 2;  break;
    case 60 : Ba = 1;  break;
    }
return(Ba);
}

if(CurrentGrafPeriod () == 1){ваше исполнение}
if(CurrentGrafPeriod () == 5){ваше исполнение}
и так далее...
но это теория - не знаю, заработает ли....
 
sss2019:


Спасибо. Значит периоду M1 соответствует значение 1, а периоду M5 соответствует значение 5, то получается что периоду H1 соответствует значение 60, а периоду H4 - 240 верно?

Мне нужно чтобы заработала вот эта конструкция, когда период M1 выбирается значение case 1 а когда период M15 выбираетсся значение case 15. Так будет работать, или нужно обязательно делать case 1 case 2 case 3 - по порядку?


Во-первых, вместо чисел 1, 5 и т.д. лучше использовать именованные константы: PERIOD_M1, PERIOD_M5 и т.д.

Во-вторых, в Вашем примере ошибка. Переменная Ba всегда будет принимать значение 1.

 
sss2019:


Спасибо. Значит периоду M1 соответствует значение 1, а периоду M5 соответствует значение 5, то получается что периоду H1 соответствует значение 60, а периоду H4 - 240 верно?

Мне нужно чтобы заработала вот эта конструкция, когда период M1 выбирается значение case 1 а когда период M15 выбираетсся значение case 15. Так будет работать, или нужно обязательно делать case 1 case 2 case 3 - по порядку?

1) так будет работать если еще добавите break в каждой строке

2) вместо 1, 5, 15 лучше использовать PERIOD_M1, PERIOD_M5, PERIOD_M15 и т. д.

 

Добрый день! Представляете, столкнулся с тем, что торговый робот не закрывает позы, примерно раз в 50, при достижении профита. Он тогда должен все закрыть, отложенники и все, и выставить по новой. Незакрытие создает неразбериху ордеров и просадки.

Так представляете, иногда оказывается, что у ордера, стопудово закрытого по тейкпрофиту, Ордерклосеприче равно нолю!!!!!

Вот, смотрите сами на скрине, вот пятая строка снизу, ордер, условно иминуемый 49, закрылся по тейкпрофиту. А в девятой строке снизу Ордерклосеприче равно нолю!!!!!

 
PapaYozh:

Во-вторых, в Вашем примере ошибка. Переменная Ba всегда будет принимать значение 1.

А почему? Нехватает break?
 
dkfl.zrjdktdbx:

Добрый день! Представляете, столкнулся с тем, что торговый робот не закрывает позы, примерно раз в 50, при достижении профита. Он тогда должен все закрыть, отложенники и все, и выставить по новой. Незакрытие создает неразбериху ордеров и просадки.

Так представляете, иногда оказывается, что у ордера, стопудово закрытого по тейкпрофиту, Ордерклосеприче равно нолю!!!!!

Вот, смотрите сами на скрине, вот пятая строка снизу, ордер, условно иминуемый 49, закрылся по тейкпрофиту. А в девятой строке снизу Ордерклосеприче равно нолю!!!!!


Это не Ордерклосеприче - это Ордер Клоус Прайс - цена закрытия ордера.

Код советника Вашего править нужно. Это он бочит.

 

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

Когда я выставляюваю ордера, я запоминаю время в пирименной wremjapomnim. Как только какой-либо ордер закрывается по-тейкпрофиту, я все ордера удаляю, и снова запоминаю время в пирименной wremjapomnim и выставляюваю.

for ( i=OrdersHistoryTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
Alert( "wremjapomnim " ,wremjapomnim, "  OrderCloseTime(        )   ",  OrderCloseTime( ),  " ",i , " OrderTakeProfit( ) " ,OrderTakeProfit( ),
  " OrderClosePrice(    )  ",OrderClosePrice(   ) );
if ( OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<2*Point)
   &&wremjapomnim<OrderCloseTime(       )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)>-2*Point)&&wremjapomnim<OrderCloseTime(       )){C=0;A=1 ;  Alert("C",C,"A",A);
   for ( int ii=OrdersTotal();ii>0;ii--){ OrderSelect(ii-1,SELECT_BY_POS );
   if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()){ 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); stsBUY=0;stsSELL=0;
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }     }              }
   
                                                      } 
 
 
melnikas:

Здравствуйте!

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

Как мне кажется ошибка кроется где-то в этом месте


потому как поле этой операции в массиве ExtVolumesBuffer ни чего не меняется.

Понимаю, что где то проявил криворукость но вот где ни как не пойму.

Заранее спасибо!


Не ужели мой случай такой непростой?

Причина обращения: