[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 645

 
artmedia70:

Não há quase nenhuma lógica - a simples saída de linhas em ordem, uma após a outra.




Eu usaria funções para facilitar a compreensão

//--------------------------------------------------------------- 1 --
// Функция вывода на экран графических сообщений.
//--------------------------------------------------------------- 2 --
  int Informations()
  {
   int   Win_ind;                     // Номер окна индикатора
   int   x,y;
   
   trH4     =Trend_PSAR(NULL,240);  // Четырёхчасовой тренд
   trH1     =Trend_PSAR(NULL,60);   // Часовой тренд
   trM30    =Trend_PSAR(NULL,30);   // Получасовой тренд
   trM15    =Trend_PSAR(NULL,15);   // 15-ти минутный тренд

//--------------------------------------------------------------- 3 --
   Win_ind= WindowFind("Info");        // Ищем номер окна индикатора
   if (Win_ind<0)return;               // Если такого окна нет, уходим
//--------------------------------------------------------------- 4 --
   x =10; y =17;
   MyObject("Equ",         x,    y,   "Свободные средства",                   9, "Tahoma", Gold);
   MyObject("EquVal",      x*23, y,   DoubleToStr(Equ_NEW,2),                 9, "Tahoma", Yellow);

//.................................
   WindowRedraw();                      // Перерисовываем все объекты
   return;
  }


void MyObject(string Name, int X, int Y, string Text, int Size, string Srift, color CL){
   if (ObjectFind(Name)==-1)
      ObjectCreate(Name,OBJ_LABEL,1,0,0,0,0);
   ObjectSet(Name,OBJPROP_XDISTANCE,X);
   ObjectSet(Name,OBJPROP_YDISTANCE,Y);
   ObjectSetText(Name, Text, Size, Srift, CL);
}
 
ToLik_SRGV:

Também me perguntei sobre isso, mas não encontrei nada de útil. Quando se trata de otimização, você já sabe sobre o grande freio do iCustom :), nos indicadores há uma restrição no número de barras, que pode ser calculado (através de IndicatorCounted() ou pelo número de barras). No código, não faz sentido se preocupar com o número e a complexidade de diferentes construções como se, enquanto, etc. Você não ganhará muito, mas com o tempo e a experiência, o código se tornará mais "bonito". Bem, no modo de visualização, quando cada "ressalto" é modelado, ele será lento quase em qualquer caso (dependendo da complexidade do sistema, é claro). Em algum lugar eu li que se cálculos complexos em um dll, será mais rápido, mas eu não o verifiquei. Com dll, também nuances suficientes.

Lembro que comandos como o TimeCurrent() diminuíram muito (quando há vários deles no código).

- É muito melhor usá-la uma vez - colocá-la em uma variável, e depois acessar a variável.

 
Vinin:


Eu usaria as funções para facilitar a percepção

Sim, é claro, Victor, é muito mais legível. Mas já estou tentando, onde possível, escrever "de frente" - é muito lento e, onde possível, estou tentando economizar milissegundos...
 
chief2000:

Lembro-me de comandos como TimeCurrent() serem muito lentos (quando há vários deles no código)

- É muito melhor usá-la uma vez - colocá-la em uma variável, e depois acessar a variável.

Ótimo! Vale a pena ver o código e refazê-lo...
 
chief2000:

Lembro que comandos como TimeCurrent() eram muito lentos (quando havia vários deles no código)

- É muito melhor usá-la uma vez, ou seja, armazená-la em uma variável e depois acessar a variável.

Como definir corretamente tal variável para que possa ser chamada mais tarde?

Declaro-o primeiro em variáveis globais

data/hora CurTime;

E então no início()

Eu lhe atribuo um valor:

CurTime=TimeCurrent();

e eu recebo um erro: 'CurTime' - variável esperada.

Como fazer isso corretamente?

E outra pergunta: se eu atribuir valores a algumas variáveis não no início() mas no init(), elas funcionarão corretamente?

Bem, quero dizer, que algumas funções, por exemplo, TimeCurrent(), ainda serão chamadas a cada tick, se uma variável for atribuída a esta função no início do start()

 
Que chatice! CurTime dá um erro, CurrTime não dá... Qual é o problema?
 
artmedia70:
Que chatice! CurTime dá um erro e CurrTime não dá... Qual é o objetivo?
A questão é que CurTime é o nome obsoleto da função TimeCurrent, por isso o compilador sempre reclama quando um nome de variável coincide com um nome de função...
 
keekkenen:
A questão é que CurTime é o nome obsoleto da função TimeCurrent, portanto, se um nome variável corresponde a um nome de função, o compilador sempre reclama...
Bem! Obrigado, eu saberei disso no futuro.
 

Amigos, meu bloco lógico pessoal está um pouco em frangalhos. Não posso decidir como estar nesta situação:

Trabalhamos em duas direções, ou seja, Comprar e Vender têm suas próprias unidades de controle separadas. As posições podem ser abertas contra-direcionalmente, tudo depende de que maneira o mercado se move em cada TF.

Suponha a situação quando Vender e Comprar estão abertas (na M5 e M15) e de repente o mercado gira na direção oposta, oposta à Venda aberta na M5 e M15 (bem, qualquer que seja a situação no mundo...). Neste caso, todas as vendas abertas começam a aumentar muito o saque, e como também abrimos a Buy, é possível fechar algumas posições tanto na Buy como na Sell, para fechar as vendas com perdas mínimas às custas da Buy fechada.

Portanto, eu não posso decidir sobre a lógica desta situação. O que deveria ser?

Só por precaução, aqui está um exemplo:


 

Boa gente, voltando ao tema de ontem:

   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
//if (c1s_1>c1s_2&&c1s_2<c1s_3)
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
//if (c1b_1<c1b_2&&c1b_2>c1b_3)
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

por favor, diga-me o que significa a mensagem do diário de bordo:

2010.06.24 17:28:26 TestGenerator: erro de dados inigualável (limite de volume 5357 em 2010.01.06 08:00 excedido)