[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 832
A mesma coisa. Uma posição é fechada - uma ordem pendente é estabelecida, etc. Há uma função que retorna o último valor (por exemplo, OrderCloseTime()). A cada tique, recebo o valor de tempo da última posição fechada (digamos, posição nº 1). Ao fechar a próxima posição (posição nº 2) com um novo tique, tenho tempo para fechar esta posição (nº 2). O valor OrderCloseTime() foi alterado em relação ao anterior. E assim por diante. Não importa como ou quanto a variável tenha mudado. O que me interessa é o próprio fato de a variável ter mudado. É como uma operação lógica: Se o OrderCloseTime() da última posição fechada for maior que o OrderCloseTime() da penúltima, então devemos fazer BLA-BLA-BLA. Também - se o OrderClosePrice() da última posição fechada não for igual ao OrderClosePrice() da penúltima, então faça um BLA-BLA-BLA-BLA. Ou talvez não seja possível fazer tal comparação?
Aqui está a questão. Suponha, por exemplo, que nosso EA mostra um sinal de compra quando o indicador (por exemplo, tomei CCI) cruza algum nível (a linha vermelha) de baixo para cima, e um sinal de venda quando ele, respectivamente, desce. Como devemos fazer para que o pedido seja aberto apenas uma vez durante a formação do bar A? Suponha que o indicador cruze o nível (a linha vermelha) para baixo e para cima várias vezes durante a formação da barra A. Como já mencionei, devemos fazer com que o pedido seja aberto apenas uma vez.
O que eu preciso é que o sinal de venda seja recebido no bar D (situação 2 no gráfico) para não fechar o pedido aberto no bar A , e não ser afetado de forma alguma.
Isto é, as ordens não são controladas pelo Consultor Especialista após serem abertas.
Forrim: Aqui está a questão. Vamos supor que o sinal de compra no EA é gerado quando o indicador (por exemplo, tomei CCI) cruza algum nível (linha vermelha) de baixo para cima, enquanto o sinal de venda é gerado, respectivamente, quando é de cima para baixo. Como devemos fazer para que o pedido seja aberto apenas uma vez durante a formação do bar A? Suponha que o indicador cruze o nível (a linha vermelha) para baixo e para cima várias vezes durante a formação da barra A. Como já mencionei, devemos fazer com que um pedido seja aberto apenas uma vez.
Isto exige que em um sinal de venda a ser recebido no bar D (situação 2 no gráfico) o pedido aberto no bar A não deve ser fechado e não deve ser afetado de forma alguma.
Ou seja, as ordens não são controladas pela EA após serem abertas.
Muito obrigado de antemão.
Na verdade, a CCI salta de tal forma que é melhor verificarmos depois que o bar foi fechado e um novo foi aberto.
Se quisermos verificar se o tempo de abertura de uma vela é diferente (se for, a ordem abre) ou é a mesma (=> nenhuma ordem abre), então a cada travessia devemos armazenar o tempo de abertura na variável global.
Forrim: Aqui está a questão. Suponha, por exemplo, que nosso EA mostra um sinal de compra quando o indicador (por exemplo, tomei CCI) cruza algum nível (a linha vermelha) de baixo para cima, e um sinal de venda quando, respectivamente, ele desce. Como devemos fazer para que o pedido seja aberto apenas uma vez durante a formação do bar A? Suponha que o indicador cruze o nível (a linha vermelha) para baixo e para cima várias vezes durante a formação da barra A. Como já mencionei, devemos fazer com que o pedido seja aberto apenas uma vez.
O que precisamos é que o sinal de venda seja recebido na barra D (situação 2 no gráfico) para não fechar o pedido aberto na barra A , e para não ser afetado de nenhuma forma.
Isto é, as ordens não são controladas pelo Consultor Especialista após serem abertas.
Agradecemos antecipadamente.
Se uma posição deste tipo já estiver aberta, não abra mais.
//--------------------------------------------------------------- 1 --// Численные значения для М15externdouble StopLoss =20; // SL для открываемого ордераexterndouble TakeProfit =20; // ТР для открываемого ордераexterndouble Step_Sar=0.02; // Шаг Sarexterndouble Maximum_Sar=0.2; // Максимум Sarexterndouble Lot=0.01; // Жестко заданное колич. лотовbool Work=true; // Эксперт будет работать.//--------------------------------------------------------------- 2 --int start()
{
int
Total, // Количество ордеров в окне
Ticket; // Номер ордераdouble
Sar_1 , // Значен. Sar текущее
Sar_0 , // Значение Sar предыдущей свечки
Price, // Цена ордера
SL, // SL ордера
TP; // TP ордераbool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell//--------------------------------------------------------------- 3 -- // Учёт ордеров
Total=0; // Количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symbol())continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
//--------------------------------------------------------------- 6 --// Торговые критерии
Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1); // Sar_1
Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0); // Sar_0if (Sar_0 > Price && Sar_1 < Price) // если Sar меняет положение
{
Opn_B=true; // Критерий откр. Buy
}
if (Sar_0 < Price && Sar_1 > Price) // если Sar меняет положение
{
Opn_S=true; // Критерий откр. Sell
}
//--------------------------------------------------------------- 7 --
{
if (Opn_B==true)
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Bid; // Вычисление SL откр.
TP=20*Bid; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()if (Opn_S==true) // критерий откр. Sell
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Ask; // Вычисление SL откр.
TP=20*Ask; // Вычисление TP откр.Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Selreturn; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()
}
//--------------------------------------------------------------- 9 --return; // Выход из start()
}
//-------------------------------------------------------------- 10 --int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки case4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеreturn(1); // Выход из функцииcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеreturn(1); // Выход из функцииcase137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеreturn(1); // Выход из функции// Критические ошибкиcase2: Alert("Общая ошибка.");
return(0); // Выход из функцииcase5: Alert("Старая версия терминала.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase64: Alert("Счет заблокирован.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase133:Alert("Торговля запрещена.");
return(0); // Выход из функцииcase134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функцииdefault: Alert("Возникла ошибка ",Error); // Другие варианты return(0); // Выход из функции
}
}
//-------------------------------------------------------------- 11 --
EA elementar, deve abrir uma posição quando o indicador Parabólico SAR muda em relação à tabela de preços, trabalha em M15, SL e TP são sempre constantes para posição aberta.
A EA compara as posições indicadoras dos castiçais atuais e dos anteriores.
Não há erros ou bugs durante a compilação, no teste na guia "resultados" "gráfico" "relatório" está vazio, no log é este: "imagem".
Estou codificando para o segundo dia, nunca codifiquei antes, li meus livros de mql e procurei na internet por meu problema. Estou em um impasse, por favor, ajude-me se puder.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
O que vai mudar na próxima vez?
O que eu preciso é que o sinal de venda seja recebido no bar D (situação 2 no gráfico) para não fechar o pedido aberto no bar A , e não ser afetado de forma alguma.
Isto é, as ordens não são controladas pelo Consultor Especialista após serem abertas.
Agradecemos antecipadamente.
Ajude-me a anexar um pedaço de código Sequent Demarque à EA https://www.mql5.com/ru/code/7372
não funciona assim:
num=0:
for(i=bars; i>=0; i--)
{
if ((iClose(NULL,PERÍODO_M5,i+1)<iClose(NULL,PERÍODO_M5,i+4) && num!=0 )) {
num+++;
if ((iClose(NULL,PERÍODO_M5,i+1)<iClose(NULL,PERÍODO_M5,i+4))
comprar.......
se (num===9)
fechar........
1. Contar o número de pedidos do primeiro tipo
2. Contar o número de pedidos do tipo 2
3. Compare os resultados
Prezado Vinin. Muito obrigado!
Aqui está a questão. Vamos supor que o sinal de compra no EA é gerado quando o indicador (por exemplo, tomei CCI) cruza algum nível (linha vermelha) de baixo para cima, enquanto o sinal de venda é gerado, respectivamente, quando é de cima para baixo. Como devemos fazer para que o pedido seja aberto apenas uma vez durante a formação do bar A? Suponha que o indicador cruze o nível (a linha vermelha) para baixo e para cima várias vezes durante a formação da barra A. Como já mencionei, devemos fazer com que um pedido seja aberto apenas uma vez.
Isto exige que em um sinal de venda a ser recebido no bar D (situação 2 no gráfico) o pedido aberto no bar A não deve ser fechado e não deve ser afetado de forma alguma.
Ou seja, as ordens não são controladas pela EA após serem abertas.
Muito obrigado de antemão.
Na verdade, a CCI salta de tal forma que é melhor verificarmos depois que o bar foi fechado e um novo foi aberto.
Se quisermos verificar se o tempo de abertura de uma vela é diferente (se for, a ordem abre) ou é a mesma (=> nenhuma ordem abre), então a cada travessia devemos armazenar o tempo de abertura na variável global.
Aqui está a questão. Suponha, por exemplo, que nosso EA mostra um sinal de compra quando o indicador (por exemplo, tomei CCI) cruza algum nível (a linha vermelha) de baixo para cima, e um sinal de venda quando, respectivamente, ele desce. Como devemos fazer para que o pedido seja aberto apenas uma vez durante a formação do bar A? Suponha que o indicador cruze o nível (a linha vermelha) para baixo e para cima várias vezes durante a formação da barra A. Como já mencionei, devemos fazer com que o pedido seja aberto apenas uma vez.
O que precisamos é que o sinal de venda seja recebido na barra D (situação 2 no gráfico) para não fechar o pedido aberto na barra A , e para não ser afetado de nenhuma forma.
Isto é, as ordens não são controladas pelo Consultor Especialista após serem abertas.
Agradecemos antecipadamente.
EA elementar, deve abrir uma posição quando o indicador Parabólico SAR muda em relação à tabela de preços, trabalha em M15, SL e TP são sempre constantes para posição aberta.
A EA compara as posições indicadoras dos castiçais atuais e dos anteriores.
Não há erros ou bugs durante a compilação, no teste na guia "resultados" "gráfico" "relatório" está vazio, no log é este: "imagem".
Estou codificando para o segundo dia, nunca codifiquei antes, li meus livros de mql e procurei na internet por meu problema. Estou em um impasse, por favor, ajude-me se puder.
T.H.C. tente isto
T.H.C. Tente isto.
Muito obrigado, não esperava uma resposta tão rápida e uma mudança tão grande no código.
Aconselhar sobre outros livros de programação além do mql básico
Muito obrigado, eu não esperava tal rapidez e mudanças no código.
Favor aconselhar mais livros sobre programação, além de mql básico.