[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 227

 

Caros colegas profissionais, preciso de sua ajuda (pli-is). Quero fazer uma função no meu EA que exibe uma notificação no canto posterior da tela sobre a tendência atual em diferentes períodos de tempo e a próxima inversão. Estou usando minhas funções de LinearRegressão e Divergir para este fim. Entretanto, nunca trabalhei com a funçãoComentar e, portanto, não consigo entender onde cometi um erro. De qualquer forma, como resultado do seguinte código, a inscrição "Trend W = Down" é exibida, mas eu quero ter informações sobre outras TFs também.

void UPDN ()
{
if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) < 0) Comment("Trend H1 = Up");
if(Diverg(LR_TFr_1,0,Diver_Per_H1)<0) Comment("...!Pivot on H1 = Down");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) < 0) Comment("Trend H4 = Up");
if(Diverg(LR_TFr_2,0,Diver_Per_H4)<0) Comment("...!Pivot on H4 = Down");
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) < 0) Comment("Trend D1 = Up");
if(Diverg(LR_TFr_3,0,Diver_Per_D1)<0) Comment("..!Pivot on D1 = Down");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) < 0) Comment("Trend W = Up");
if(Diverg(LR_TFr_4,0,Diver_Per_W)<0) Comment("...!Pivot to W = Down");

if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) > 0) Comment("Trend H1 = Down");
if(Diverg(LR_TFr_1,0,Diver_Per_H1)>0) Comment("....!Pivot on H1 = Up");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) > 0) Comment("Trend H4 = Down");
if(Diverg(LR_TFr_2,0,Diver_Per_H4)>0) Comment("...!Pivot on H4 = Up");
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) > 0) Comment("Trend D1 = Down");
if(Diverg(LR_TFr_3,0,Diver_Per_D1)>0) Comment("...!Pivot on D1 = Up");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) > 0) Comment("Trend W = Down");
if(Diverg(LR_TFr_4,0,Diver_Per_W)>0) Comment("....W = Up");
return(0);
}

 
Optim:

Caros colegas-profissionais, preciso de sua ajuda (pli-is). Quero fazer uma função no meu EA que exibe uma notificação no canto posterior da tela sobre a tendência atual em diferentes períodos de tempo e a próxima inversão. Estou usando minhas funções de LinearRegressão e Divergir para este fim. Entretanto, nunca trabalhei com a função Comentar e, portanto, não consigo entender onde cometi um erro. De qualquer forma, o código abaixo exibe apenas a mensagem "Trend W = Down", mas quero que ele me informe sobre outras TFs.

nulo UPDN ()
{
if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diverg_Per_H1, 0) < 0) Comentário("Tendência H1 = Para cima")
if(Diverg(LR_TFr_1,0,Diver_Per_H1)<0) Comentário("...!Turn at H1 = Down");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diverg_Per_H4, 0) < 0) Comentário("Tendência H4 = Para cima")
if(Diverg(LR_TFr_2,0,Diver_Per_H4)<0) Comentário("...!H4 trend reversal = Down")
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) < 0) Comentário("Tendência D1 = Para cima")
if(Diverg(LR_TFr_3,0,Diver_Per_D1)<0) Comentário("...!Pivot on D1 = Down");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) < 0) Comentário("Trend W = Up");
if(Diverg(LR_TFr_4,0,Diver_Per_W)<0) Comentário(";)

if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diverg_Per_H1, 0) > 0) Comentário("Tendência H1 = Down")
if(Diverg(LR_TFr_1,0,Diver_Per_H1)>0) Comentário("...!H1 trend reversal = Up");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) > 0) Comentário("Tendência H4 = Down")
if(Diverg(LR_TFr_2,0,Diver_Per_H4)>0) Comentário("...!H4 trend reversal = Up");
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) > 0) Comentário("Tendência D1 = Down")
if(Diverg(LR_TFr_3,0,Diver_Per_D1)>0) Comment("...!Pivot on D1 = Up");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) > 0) Comentário("Tendência W = Down");
if(Diverg(LR_TFr_4,0,Diver_Per_W)>0) Comentário("...!Divergir para W = Para cima")
retorno(0);
}


Comentário nulo(...)
A função produz um comentário definido pelo usuário no canto superior esquerdo do gráfico. Os parâmetros podem ser de qualquer tipo. O número de parâmetros não pode exceder 64.

Arrays não podem ser passados para Comentário(). As arrays devem ser impressas elemento por elemento.

Os dados do tipo duplo são emitidos com 4 dígitos decimais após o ponto. Para imprimir números com maior precisão, use a funçãoDoubleToStr().
O bool, data e tipos de cores serão impressos como números.
Para emitir dados de data e hora como uma string, use a funçãoTimeToStr().

Para dividir a saída em várias linhas, você pode usar o caractere de alimentação de linha "\n" ou "\r\n".
Veja tambémAlerta() eImpressão().
Parâmetros:
...-Quaisquer valores, separados por vírgulas.
Exemplo:
 double free=AccountFreeMargin(); Comentário("Margem livre de conta é ",DoubleToStr(free,2),"\n", "Tempo atual é ",TimeToStr(TimeCurrent());
 
Ao menos leia a documentação antes de fazer perguntas. Metade das respostas já estão lá
 

Obrigado, eu peguei. Preciso inserir variáveis de acordo com os resultados das funções LinearRegression e Divergir para cada TF e, em seguida, emiti-las com um comentário, podem estar em várias linhas.

 
Optim:

Obrigado, eu peguei. Preciso inserir variáveis de acordo com os resultados das funções LinearRegression e Divergir para cada TF e, em seguida, emiti-las com um comentário, podem estar em várias linhas.


Há apenas uma limitação em termos de comprimento de linha. Você pode usar a função de Alexander Pak. Se você não conseguir encontrá-lo, eu mesmo o procurarei
 

Caros senhores!

Tenho uma pergunta sobre como passar um array por referência.

O esquema do algoritmo é o seguinte:

Passamos um array por referência de uma biblioteca para outra.

Nós o copiamos lá usando a função embutida:

ArrayCopy.

Em seguida, é utilizada a matriz passada por referência

no primeiro módulo.

Mas, por alguma razão, ocorre um erro, e nem sempre.

Isto é, às vezes a matriz é copiada, às vezes não.

Qual é a razão?

A entrada do registro é a seguinte:

21:07:12 openHistory CADCHF,H1:

2 gamas de matrizes para a função ArrayCopy (0 e 4)

Conectando o módulo

Cópia

 
Roger:
Isso porque você copiou mal meu exemplo. Veja cuidadosamente onde está o i e onde está o k.

Corrigido o código de acordo com o seu.
Ao testar, quatro ordens foram fechadas na ordem em que foram colocadas no primeiro tick, a quinta fechada no tick seguinte. Provavelmente algo mais está errado aqui, já que eu o testei muitas vezes.
Estou lhes fornecendo o código do programa e os logs do testador.
Sinceramente. Shurkin

Код программы.
//+------------------------------------------------------------------+
//|                                                     Poligon1.mq4 |
//|                                            21 февраля 2013 года. |
//|Тестирование оператора цикла for.                                 |
//+------------------------------------------------------------------+
#property copyright "21 февраля 2013 года."
#property link      ""
//+------------------------------------------------------------------+
//|Объявленные переменные                                            |
//+------------------------------------------------------------------+
int Mn=357;//Magic number
int i;//Показатель счётчика итераций
double PriTP;//TP серии
int Tick;//Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----Установка серии ордеров
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,NormalizeDouble(Bid-35*Point,Digits),
NormalizeDouble(Ask+35*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1,Ask,0,NormalizeDouble(Bid-25*Point,Digits),
NormalizeDouble(Ask+25*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUYLIMIT,1,NormalizeDouble(Ask-15*Point,Digits),0,
NormalizeDouble(Bid-40*Point,Digits),NormalizeDouble(Ask+25*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_BUYLIMIT
OrderSend(Symbol(),OP_SELLSTOP,3,NormalizeDouble(Ask-30*Point,Digits),0,
NormalizeDouble(Bid+15*Point,Digits),NormalizeDouble(Ask-75*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_SELLSTOP
//----
   PriTP=Bid;//PriTP
   Print("Кс0:"," OrdersTotal=",OrdersTotal());//Сообщение
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   Tick++;//Tick
//   Print("Кс0:"," Tick=",Tick);//Сообщение
//----
//   for(i=0;i<OrdersTotal();i++)//Инициализация цикла
//   for(i=OrdersTotal()-1; i>=0; i--)//
   for(i=0, int k=0; i<OrdersTotal();i++,k++)//
   {
   Print("Кс1:"," Tick=",Tick," i=",i," k=",k);//Сообщение
   if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера k
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
   k--;//?
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0, int k=0; i<OrdersTotal();i++,k++)
/*   
   for(i=0, int k=0; i<OrdersTotal();i++,k++)//
   {
   Print("Кс1:"," Tick=",Tick," i=",i," k=",k);//Сообщение
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
   k--;//Зачем сначала прибавлять и тут же убавлять ???
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0;i<OrdersTotal();i++)
*/   
//----
   return(0);
  }
//+------------------------------------------------------------------+
Записи в журнале тестера.
2013.03.18 13:58:21     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=4 i=1 k=1
2013.03.18 13:58:21     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=4 i=0 k=0
2013.03.18 13:57:57     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=3 i=1 k=1
2013.03.18 13:57:57     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=3 i=0 k=0
2013.03.18 13:57:33     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=2 i=1 k=0
2013.03.18 13:57:33     2013.02.11 12:15  Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3394
2013.03.18 13:57:33     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=2 i=0 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=1 i=3 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=1 i=2 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 at price 1.3395
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=1 i=1 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 at price 1.3395
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=1 i=0 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ0: OrdersTotal=7
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.3367 sl: 1.3410 tp: 1.3322 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.3382 sl: 1.3355 tp: 1.3422 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 ok
2013.03.18 13:57:09     Poligon1 test started
2013.03.18 13:57:02     Poligon1 EURUSD,M15: loaded successfully
 
Onde é o melhor lugar para declarar um tipo variável (int, double, etc.) em termos de redução do consumo de recursos da execução do programa. Por exemplo, int i pode ser declarado globalmente ou em int start() ... para (int i=OrdersTotal()-1; i>=0; i--) ... Tenho a sensação de que declará-lo em cada carrapato é mais caro do que declará-lo uma vez em nível global, logo após parâmetros externos. Ou a diferença na intensidade de recursos é a mesma?
 
Zhunko:
Você tem que dar o laço para o início. Trabalhar dentro do laço. Lá você pode fazer qualquer coisa.

Isto é um pouco diferente. quando a conexão é perdida, o registro diz "Ping falhou". isto significa que há fi ries, mas eles não estão documentados por alguma razão.
Quanto da carga na CPU e na memória é aumentada através de looping?

 
Dimka-novitsek:

Boa noite! Com licença, eu gostaria de voltar a um problema não resolvido.

Compra - tipos incompatíveis D:\TeleTRADE/experts/experts/clean.mq4 (102, 53)

Venda' - tipos incompatíveis D:\TeleTRADE=especialistas.mq4 (102, 79)


if (!Pishem&&PozyProstavleny){SaveArray(FileBuy, Buy); SaveArray(FileSell, Sell); Pishem=1;}

Esta linha não é compilada.