[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.
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.
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());
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.
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
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 numberint 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_BUYOrderSend(Symbol(),OP_BUY,1,Ask,0,NormalizeDouble(Bid-25*Point,Digits),
NormalizeDouble(Ask+25*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUYOrderSend(Symbol(),OP_BUY,1.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUYOrderSend(Symbol(),OP_BUY,2.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUYOrderSend(Symbol(),OP_BUY,3.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUYOrderSend(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_BUYLIMITOrderSend(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;//PriTPPrint("Кс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.1813:58:212013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=4 i=1 k=12013.03.1813:58:212013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=4 i=0 k=02013.03.1813:57:572013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=3 i=1 k=12013.03.1813:57:572013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=3 i=0 k=02013.03.1813:57:332013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=2 i=1 k=02013.03.1813:57:332013.02.1112:15 Poligon1 EURUSD,M15: close #5buy3.50EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.33942013.03.1813:57:332013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=2 i=0 k=02013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.33952013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=1 i=3 k=02013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.33952013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=1 i=2 k=02013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 at price 1.33952013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=1 i=1 k=02013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 at price 1.33952013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: Êñ1: Tick=1 i=0 k=02013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: Êñ0: OrdersTotal=72013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.3367 sl: 1.3410 tp: 1.3322 ok2013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.3382 sl: 1.3355 tp: 1.3422 ok2013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok2013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok2013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok2013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 ok2013.03.1813:57:092013.02.1112:15 Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 ok2013.03.1813:57:09 Poligon1 test started
2013.03.1813: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?
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);
}
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);
}
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().
double free=AccountFreeMargin(); Comentário("Margem livre de conta é ",DoubleToStr(free,2),"\n", "Tempo atual é ",TimeToStr(TimeCurrent());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.
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)
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
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?
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)
Esta linha não é compilada.