[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 418

 
sss2019:


Obrigado. Então o período M1 corresponde ao valor 1, e o período M5 corresponde ao valor 5, então isso significa que o período H1 corresponde ao valor 60, e o período H4 corresponde ao valor 240 certo?


Sim, isso mesmo.

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 Период текущего графика

 

Olá!

Por favor, ajude-me a entender. Estou tentando escrever um indicador simples, mas de alguma forma ele fornece valores vazios.

Parece-me que o erro está em algum lugar neste lugar

ExtVolumesBuffer[i]=dVolume;


porque o campo desta operação na matriz ExtVolumesBuffer não muda nada.

Entendo que em algum lugar eu cometi um erro, mas não entendo onde.

Obrigado de antemão!

#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:


Obrigado. Então o período M1 corresponde ao valor 1, e o período M5 corresponde ao valor 5, então acontece que o período H1 corresponde a 60, e o período H4 a 240, certo?

Eu preciso desta construção para trabalhar: quando o período M1 é selecionado caso 1 e quando o período M15 é selecionado caso 15. Funcionará, ou é necessário fazer o caso 1 caso 2 caso 3 - em ordem?

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){ваше исполнение}
и так далее...
mas esta é uma teoria - não sei se vai funcionar....
 
sss2019:


Obrigado. Então o período M1 corresponde ao valor 1, e o período M5 corresponde ao valor 5, então isso significa que o período H1 corresponde ao valor 60, e o período H4 corresponde ao valor 240 certo?

Quero que esta construção funcione: quando o período M1 for definido para o caso 1 e quando o período M15 for definido para o caso 15. Funcionará desta forma ou é necessário fazer o caso 1 caso 2 caso 3 - em ordem?


Primeiro, é melhor usar constantes nomeadas em vez dos números 1, 5, etc. : PERÍODO_M1, PERÍODO_M5, etc.

Em segundo lugar, há um erro em seu exemplo. A variável Ba sempre terá valor 1.

 
sss2019:


Obrigado. Então o período M1 corresponde ao valor 1, e o período M5 corresponde ao valor 5, então isso significa que o período H1 corresponde ao valor 60, e o período H4 corresponde ao valor 240 certo?

Quero que esta construção funcione: quando o período M1 for definido para o caso 1 e quando o período M15 for definido para o caso 15. Funcionará ou é necessário fazer o caso 1 caso 2 caso 3 - em ordem?

1) Funcionará se você acrescentar uma pausa em cada linha.

2) Ao invés de 1, 5, 15, é melhor usar PERIOD_M1, PERIOD_M5, PERIOD_M15, etc.

 

Boa tarde, acabamos de nos deparar com o fato de que o robô comercial não fecha as posições, cerca de uma vez em 50, quando atinge um lucro. Em seguida, tem que fechar tudo, ordens pendentes e tudo mais, e se instalar novamente. Não fechar cria confusão de ordem e drawdown.

Você pode imaginar que às vezes acontece que um pedido, que foi definitivamente fechado no takeprofit, tem um preço de fechamento de pedido igual a zero !!!!!.

Aqui, veja a captura de tela, aqui está a quinta linha do fundo; a ordem, convencionalmente chamada 49, fechada em TakeProfit. E na nona linha a partir do fundo Orderclosepriche igual a zero!!!!!

 
PapaYozh:

Em segundo lugar, há um erro em seu exemplo. A variável Ba sempre terá o valor 1.

E por quê? Está faltando uma pausa?
 
dkfl.zrjdktdbx:

Boa tarde, acabamos de nos deparar com o fato de que o robô comercial não fecha as posições, cerca de uma vez em 50, quando atinge um lucro. Depois tem que fechar tudo, pingentes e tudo, e montar de novo. Não fechar cria confusão de ordem e drawdown.

Você pode imaginar que às vezes acontece que um pedido, que foi definitivamente fechado no takeprofit, tem um preço de fechamento de pedido igual a zero !!!!!.

Você pode ver na imagem abaixo, aqui está a quinta linha; a ordem nominalmente chamada 49 fechada em TakeProfit. E na nona linha do fundo Orderclosepriche é igual a zero!!!!!


Este não é o preço de fechamento do pedido - é o preço Clowes - preço de fechamento do pedido.

O código de seu Consultor Especialista precisa ser corrigido. É o que está lutando.

 

Estou vendo. Não há nada no código que seja particularmente complicado... Vou postar agora.

Quando faço pedidos, poupo o tempo em wremjapomnim. Assim que qualquer ordem é fechada com lucro atual, eu apago todas as ordens e lembro novamente o tempo na variável wremjapomnim e as defino.

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:

Olá!

Por favor, ajude-me a entender isto. Estou tentando escrever um indicador simples, mas de alguma forma ele fornece valores vazios.

Parece-me que o erro está em algum lugar neste lugar


porque o campo desta operação na matriz ExtVolumesBuffer não muda nada.

Entendo que cometi um erro em algum lugar, mas não entendo onde.

Obrigado de antemão!


Meu caso é tão complicado assim?