voidOnTick()
{
TimeCurrent(dt);
//--- Достаточно ли количество баров для работыif(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
{
Alert("На графике меньше 10 баров, советник не будет работать!!");
return;
}
//--- сначала нужно записать в массивы значения буферов индиктора Fractal//--- заполнение данными буфераArraySetAsSeries(Signal,true);
ArraySetAsSeries(Main,true);
if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;
double Main_1=Main[1];
Main_1=NormalizeDouble(Main_1,5);
Print("Main_1=",DoubleToString(Main_1,5));
double Main_2=Main[2];
Main_2=NormalizeDouble(Main_2,5);
double Main_3=Main[3];
Main_3=NormalizeDouble(Main_3,5);
double Signal_1=Signal[1];
Signal_1=NormalizeDouble(Signal_1,5);
Print("Signal_1=",DoubleToString(Signal_1,5));
double Signal_2=Signal[2];
Signal_2=NormalizeDouble(Signal_2,5);
double Signal_3=Signal[3];
Signal_3=NormalizeDouble(Signal_3,5);
// Для сохранения значения времени бара мы используем static-переменную Old_Time.// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.// Если они не равны, это означает, что начал строится новый бар.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
// копируем время текущего бара в элемент New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, успешно скопировано
{
if(Old_Time!=New_Time[0]) // если старое время не равно
{
IsNewBar=true; // новый барif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
Old_Time=New_Time[0]; // сохраняем время бара
}
}
else
{
Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
ResetLastError();
return;
}
// открытие покупок
if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
{
if(IsNewBar!=false)
{
{
open_by_market();
}
}
}
// закрытие покупок if (Signal_3>80&&Signal_2>80&&Signal_1<80)
{
if(PositionsTotal()>0)
{
for(int i=0;i<PositionsTotal();i++)
{
ulong orders_ticket=PositionGetTicket(i);
if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
{ trade.PositionClose(orders_ticket); }
}
}
}
}
Bom dia. Por favor esclarecer como implementar duas tarefas (usando sinais de compra como exemplo).
dado: ponto de entrada - passagem de linha estocástica abaixo de 20
encerramento do comércio - passagem de 80 nível para baixo através da linha de estocástico lento
ou seja, não abrir várias posições no mesmo nível como na imagem em anexo
2. fechar no segundo, e não no primeiro cruzamento do nível 80 de cima para baixo com uma linha estocástica lenta
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Aconselhar como aceder à informação de posição na função OnTick do Expert Advisor construído. Pelo menos quer esteja aberto ou não. Onde posso obter um ponteiro para a posição? Ou precisa de ser feito de alguma outra forma?
VHS: Aconselhar como aceder à informação de posição na função OnTick de um Expert Advisor construído. Pelo menos, se estiver aberto ou não. Onde posso obter um ponteiro para a posição? Ou precisa de ser feito de alguma outra forma?
O Expert Advisor é concebido pela Wizard utilizando uma classe de sinal personalizada e uma classe de negociação personalizada. O código do próprio Expert Advisor é padrão. ExtExpert.OnTick() é chamado em OnTick, o resto do código é construído utilizando a biblioteca padrão. Na verdade, esta pergunta é um seguimento da anterior, à qual ninguém respondeu. Quero que o Expert Advisor concebido pela Wizard utilize a classe de sinais personalizados apenas para abrir posições e fechá-las apenas ao negociar e ignorar os sinais da classe de sinais. Descobri como ignorar os sinais. Mas como obter informação no onTick sobre se existe uma posição aberta para permitir ignorar, não compreendo.
Sim, Artyom, muito obrigado. Aparentemente, auto-substituição (ou mãos tortas). E a classe e o fecho personalizados não são trayDing, mas sim trayLing.
Na classe CExpert, o método Processing vai primeiro para Direction e verifica se existe um sinal da classe do sinal. E depois (apenas se houver uma posição SelectPosition) verifica o Trailing. Como resultado, se houver uma posição aberta, esta fechará por vezes na ausência de sinais da classe de sinalização, obtendo um sinal da classe de sinalização.
A variante anterior - tirar informação sobre a presença de uma posição aberta da classe Trailing Stop e passá-la para Ignorar via OnTick - não funcionou. Aprendi a memorizar no OnInit o objecto móvel e a transferi-lo para o OnTick. Mas só funciona enquanto a posição estiver aberta. Mas depois de fechado, o processamento não começa a seguir o rasto e Ignorar permanece ignorado. Portanto, há apenas um toque final: após fechar a posição, definir este momento em OnTick e devolver Ignorar o valor "0". Mas como obter eficazmente informação sobre (presença/ausência de) uma posição no OnTick que não compreendo.
VHS: Sim, Artem, muito obrigado. Aparentemente, troca automática (ou mãos tortas). E a classe e o fecho personalizados não é trayDing, é trayLing.
Na classe CExpert, o método Processing vai primeiro para Direction e verifica se existe um sinal da classe do sinal. E depois (apenas se houver uma posição SelectPosition) verifica o Trailing. Como resultado, se houver uma posição aberta, esta fechará por vezes na ausência de sinais da classe de sinalização, obtendo um sinal da classe de sinalização.
A variante anterior - tirar informação sobre a presença de uma posição aberta da classe Trailing Stop e passá-la para Ignorar via OnTick - não funcionou. Aprendi a memorizar no OnInit o objecto móvel e a transferi-lo para o OnTick. Mas só funciona enquanto a posição estiver aberta. Mas depois de fechado, o processamento não começa a seguir o rasto e Ignorar permanece ignorado. Portanto, há apenas um toque final: após fechar a posição, definir este momento em OnTick e devolver Ignorar o valor "0". Mas como obter eficazmente informação sobre (presença/ausência de) uma posição no OnTick que não compreendo.
Penso que pode tornar isto muito mais fácil - na sua EA defina o limiar FECHADO para 100, e dê 0,5 peso ao sinal - assim um sinal com um peso de 0,5 NUNCA passará o limiar de 100
Bom dia. Por favor esclarecer como implementar duas tarefas (usando sinais de compra como exemplo).
dado: ponto de entrada - passagem de linha estocástica abaixo de 20
encerramento do comércio - passagem de 80 nível para baixo através da linha de estocástico lento
ou seja, não abrir várias posições no mesmo nível como na imagem em anexo
2. fechar no segundo, e não no primeiro cruzamento do nível 80 de cima para baixo com uma linha estocástica lenta
Bom dia. Por favor esclarecer como implementar duas tarefas (usando sinais de compra como exemplo).
dado: ponto de entrada - passagem de linha estocástica abaixo de 20
encerramento do comércio - passagem de 80 nível para baixo através da linha de estocástico lento
ou seja, não abrir várias posições no mesmo nível como na imagem em anexo
2) A segunda ordem seria fechada na segunda, não a primeira, atravessando o nível 80 para baixo através da linha estocástica lenta
Em primeiro lugar, formulá-lo claramente:
Aconselhar como aceder à informação de posição na função OnTick de um Expert Advisor construído. Pelo menos, se estiver aberto ou não. Onde posso obter um ponteiro para a posição? Ou precisa de ser feito de alguma outra forma?
O Conselheiro Especialista é concebido por quem?
Por favor, mostre-me o código.O perito é concebido por quem?
Mostrar o código, por favor.***E eu só fechei por negociação ***
Não é claro.
VHS:
***а закрывал уже только по трейдингу ***
Vladimir Karputov:
Não é claro.
"D" e "L" um ao lado do outro no teclado. O meu erro.
"D" e "L" um ao lado do outro no teclado. Errado.
Sim, Artem, muito obrigado. Aparentemente, troca automática (ou mãos tortas). E a classe e o fecho personalizados não é trayDing, é trayLing.
Penso que pode tornar isto muito mais fácil - na sua EA defina o limiar FECHADO para 100, e dê 0,5 peso ao sinal - assim um sinal com um peso de 0,5 NUNCA passará o limiar de 100