Coloque-o dentro. Eu não o fiz. Abre em pacotes. Magia - ela a ignora.
Quando você escreve seu código, traduza sua lógica para o russo. A princípio, há um ciclo no qual são feitas comparações e se a ordem selecionada não for uma ordem de mercado, então para a próxima iteração; se o símbolo não for EURUSD, então para a próxima iteração e se o magik não for igual ao seu magik, então para a próxima iteração. Ao final do ciclo você conta o número de iterações passadas antes do final do ciclo. O ciclo termina e o programa começa a abrir ordens de acordo com as condições. Considerando que uma das condições é sempre verdadeira, uma ordem é aberta. E isto acontece a cada tique.
Ao escrever o código, traduza sua lógica para o russo. Primeiro você tem um ciclo no qual são feitas comparações; se a ordem selecionada não é uma ordem de mercado, então para a próxima iteração; se o instrumento não é o Eurobucks, então para a próxima iteração; e se o magik não é igual ao seu magik, então para a próxima iteração. Ao final do ciclo você conta o número de iterações passadas antes do final do ciclo. O ciclo termina e o programa começa a abrir ordens de acordo com as condições. Considerando que uma das condições é sempre verdadeira, uma ordem é aberta. E isto acontece a cada tique.
Estou vendo. Mas neste caso, se(OrderMagicNumber() == MagicNumber)continuar, o pedido que foi feito é aceito para um pedido feito por Magic(o). Isso significa que o pedido feito manualmente na EUROBAX deve ser ignorado e mais um pedido deve ser aberto por um Consultor Especialista com Magic.
OrdersTotal() - este é o problema que põe um fim a qualquer manipulação com Magic.
Eu entendo. Mas neste caso: if(OrderMagicNumber() == MagicNumber)continue; as encomendas que são feitas são tomadas para encomendas feitas por Magic(s). Ou seja, uma encomenda feita manualmente no Eurobucks deve ser ignorada, e outra deve ser aberta por uma EA com Magic.
OrdersTotal() - esta é a infestação que põe um fim a qualquer manipulação do mágico.
O código é executado de cima para baixo. Após o loop você tem a colocação de pedidos. if(OrderMagicNumber() == MagicNumber)continue; Isto interromperá a execução do corpo do loop e uma nova iteração do loop será iniciada. O ciclo terminará e a colocação de pedidos começará. Foi assim que você o escreveu. O número total de pedidos não tem nada a ver com isso. Se você quiser fazer uma condição de que se não houver pedidos feitos com seu magik e instrumento, então o código de colocação de pedidos deve ser diferente.
Ciclo através dos números de pedido. Se for encontrado um pedido com nosso magik e em nosso instrumento, então retornar - sair do início. Ou uma bandeira de que seu pedido está lá e no início ontik ou começar a verificar a bandeira.
E é melhor criar um EA a partir de um modelo para criar um script EA, um indicador. Os principais campos de código serão mais corretos.
datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)externint P=1; //Таймфреймexternint MagicNumber = 100500;
int start()
{
int send;
double SL=200;
double TP=200;
double Lots=1;
for(int i = OrdersTotal(); i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber)return(0);
}
if ((Close[0]>High[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}
if ((Close[0]<Low[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}
return(0);
}
O código é executado de cima para baixo. em um loop, de acordo com as regras do loop. Após o loop que você tiver fazendo pedidos. if(OrderMagicNumber() == MagicNumber)continue; Isto interromperá a execução do corpo do loop e uma nova iteração do loop será iniciada. O ciclo terminará e a colocação de pedidos começará. Foi assim que você o escreveu. O número total de pedidos não tem nada a ver com isso. Se você quiser fazer uma condição de que se não houver pedidos feitos com seu magik e instrumento, então o código de colocação de pedidos deve ser diferente.
Cicle através dos números de pedido. Se for encontrado um pedido com nosso magik e em nosso instrumento, então retornar - sair do início. Ou uma bandeira de que seu pedido está lá e no início ontik ou começar a verificar a bandeira.
E é melhor criar um EA a partir de um modelo para criar um script EA, um indicador. Os principais campos de código serão mais corretos.
for(int i = OrdersTotal(); i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber)return(0);
}
Acho que esta não é a solução, mas em que direção trabalhar?
Eu tentei algumas dezenas de variantes. Ou abre um pedido, ou sem qualquer interrupção, tuyvukuchu.
Aqui, a propósito, sobre OrderSekect - uma variável do tipo bool deve ser definida, caso contrário, ela jurará.
Gente boa e conhecedora! Ajuda para implementar o indicador Envelopes em uma EA MT5. A própria EA tem que processar cada carrapato (sem pular). Tentei algumas variantes, procurei na documentação, parece que gosto da variante, mas é para o manipulador OnCalculate. Ainda não experimentei com a biblioteca padrão... Bem, aqui está minha implementação inicial:
inputint Indicatorperiod = 3;
inputdouble EnvelopesDeviation = 0.07;
int handle; //--- переменная для хранения хэндла индикатора iEnvelopesdouble upperEnv[3], lowerEnv[3]; // динамические массивы для хранения численных значений Emvelopesdouble local_envelopesupper, local_envelopeslower; // в эти переменные пытаюсь получить значения верхней и нижней линии индикатора
...
intOnInit()
...
handle=iEnvelopes(_Symbol,_Period,Indicatorperiod,0,MODE_LWMA,PRICE_OPEN,EnvelopesDeviation);
...
voidOnTick()
...
//--- Объявляем структуру, которая будут использоватьсяMqlRates mrate[3]; // Будет содержать цены, объемы и спред для каждого бараArraySetAsSeries(mrate, true);
//--- Получить исторические данные последних 3-х баровif(CopyRates(_Symbol,_Period,0,3,mrate)!=3)
{
Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
return;
}
//--- Используя хэндлы индикаторов, копируем новые значения индикаторных буферов в массивыif(CopyBuffer(handle,0,0,3,upperEnv)<2 || CopyBuffer(handle,1,0,3,lowerEnv)<2)
{
Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!");
return;
}
...
local_envelopesupper = upperEnv[1];
local_envelopeslower = lowerEnv[1];
...
No testador visual eu recebo:
Você pode me dizer o que está errado e qual é a melhor maneira de fazer isso?
É melhor escrever o algoritmo que você quer fazer, não está claro o que você precisa.
Na primeira mensagem está o código. É fácil: quebramos o anterior alto/baixo - abrimos um acordo. As ordens abertas por esta EA não devem cruzar as outras ordens abertas manualmente ou por outra EA, ou seja, a EA deve trabalhar de forma independente.
Eu pesquisei em toda a Internet. É um tema bastante trivial, mas há muitas variações. Parece ser uma coisa simples, e não se encontra em nenhum lugar.
Na primeira mensagem, o código. É simples: quebrar a alta/baixa anterior - abrir um comércio. As ordens abertas por esta EA não devem se sobrepor com outras ordens abertas manualmente, ou com aquelas abertas por outra EA, ou seja, a EA deve trabalhar independentemente.
Eu pesquisei em toda a Internet. É um tema bastante trivial, mas há muitas variações. Parece ser uma coisa simples, e não se encontra em nenhum lugar.
Descrever o trabalho do Consultor Especialista passo a passo em sua totalidade. O primeiro passo é verificar se há pedidos com nosso magik no símbolo selecionado. Se os tivermos, então terminamos o trabalho e se não tivermos, então definimos as ordens. O que acontece depois que as encomendas são feitas? É assim
Coloque-o dentro. Eu não o fiz. Abre em pacotes. Magia - ela a ignora.
Quando você escreve seu código, traduza sua lógica para o russo. A princípio, há um ciclo no qual são feitas comparações e se a ordem selecionada não for uma ordem de mercado, então para a próxima iteração; se o símbolo não for EURUSD, então para a próxima iteração e se o magik não for igual ao seu magik, então para a próxima iteração. Ao final do ciclo você conta o número de iterações passadas antes do final do ciclo. O ciclo termina e o programa começa a abrir ordens de acordo com as condições. Considerando que uma das condições é sempre verdadeira, uma ordem é aberta. E isto acontece a cada tique.
Ao escrever o código, traduza sua lógica para o russo. Primeiro você tem um ciclo no qual são feitas comparações; se a ordem selecionada não é uma ordem de mercado, então para a próxima iteração; se o instrumento não é o Eurobucks, então para a próxima iteração; e se o magik não é igual ao seu magik, então para a próxima iteração. Ao final do ciclo você conta o número de iterações passadas antes do final do ciclo. O ciclo termina e o programa começa a abrir ordens de acordo com as condições. Considerando que uma das condições é sempre verdadeira, uma ordem é aberta. E isto acontece a cada tique.
Estou vendo. Mas neste caso, se(OrderMagicNumber() == MagicNumber)continuar, o pedido que foi feito é aceito para um pedido feito por Magic(o). Isso significa que o pedido feito manualmente na EUROBAX deve ser ignorado e mais um pedido deve ser aberto por um Consultor Especialista com Magic.
OrdersTotal() - este é o problema que põe um fim a qualquer manipulação com Magic.Eu entendo. Mas neste caso: if(OrderMagicNumber() == MagicNumber)continue; as encomendas que são feitas são tomadas para encomendas feitas por Magic(s). Ou seja, uma encomenda feita manualmente no Eurobucks deve ser ignorada, e outra deve ser aberta por uma EA com Magic.
OrdersTotal() - esta é a infestação que põe um fim a qualquer manipulação do mágico.O código é executado de cima para baixo. Após o loop você tem a colocação de pedidos. if(OrderMagicNumber() == MagicNumber)continue; Isto interromperá a execução do corpo do loop e uma nova iteração do loop será iniciada. O ciclo terminará e a colocação de pedidos começará. Foi assim que você o escreveu. O número total de pedidos não tem nada a ver com isso. Se você quiser fazer uma condição de que se não houver pedidos feitos com seu magik e instrumento, então o código de colocação de pedidos deve ser diferente.
Ciclo através dos números de pedido. Se for encontrado um pedido com nosso magik e em nosso instrumento, então retornar - sair do início. Ou uma bandeira de que seu pedido está lá e no início ontik ou começar a verificar a bandeira.
E é melhor criar um EA a partir de um modelo para criar um script EA, um indicador. Os principais campos de código serão mais corretos.
O código é executado de cima para baixo. em um loop, de acordo com as regras do loop. Após o loop que você tiver fazendo pedidos. if(OrderMagicNumber() == MagicNumber)continue; Isto interromperá a execução do corpo do loop e uma nova iteração do loop será iniciada. O ciclo terminará e a colocação de pedidos começará. Foi assim que você o escreveu. O número total de pedidos não tem nada a ver com isso. Se você quiser fazer uma condição de que se não houver pedidos feitos com seu magik e instrumento, então o código de colocação de pedidos deve ser diferente.
Cicle através dos números de pedido. Se for encontrado um pedido com nosso magik e em nosso instrumento, então retornar - sair do início. Ou uma bandeira de que seu pedido está lá e no início ontik ou começar a verificar a bandeira.
E é melhor criar um EA a partir de um modelo para criar um script EA, um indicador. Os principais campos de código serão mais corretos.
Acho que esta não é a solução, mas em que direção trabalhar?
Eu tentei algumas dezenas de variantes. Ou abre um pedido, ou sem qualquer interrupção, tuyvukuchu.
Aqui, a propósito, sobre OrderSekect - uma variável do tipo bool deve ser definida, caso contrário, ela jurará.
Isto não é uma solução, mas qual o caminho a seguir?
Já experimentei algumas dezenas de variantes. Ou abre uma única ordem, ou abre sem nenhuma interrupção.
A propósito, aqui, sobre OrderSekect - uma variável do tipo bool deve ser definida, caso contrário ela jurará.
Sim, deveria, não volta a lugar nenhum.
É melhor escrever um algoritmo, o que você quer fazer.
Isto não é uma solução, mas qual o caminho a seguir?
Já experimentei algumas dezenas de variantes. Ou abre uma única ordem, ou abre sem nenhuma interrupção.
A propósito, aqui, sobre OrderSekect - uma variável do tipo bool deve ser definida, caso contrário ela jurará.
Em vez de retornar(0), deve continuar
Gente boa e conhecedora! Ajuda para implementar o indicador Envelopes em uma EA MT5. A própria EA tem que processar cada carrapato (sem pular). Tentei algumas variantes, procurei na documentação, parece que gosto da variante, mas é para o manipulador OnCalculate. Ainda não experimentei com a biblioteca padrão... Bem, aqui está minha implementação inicial:
No testador visual eu recebo:

Você pode me dizer o que está errado e qual é a melhor maneira de fazer isso?Sim, é suposto jurar, não volta a lugar nenhum.
É melhor escrever o algoritmo que você quer fazer, não está claro o que você precisa.
Na primeira mensagem está o código. É fácil: quebramos o anterior alto/baixo - abrimos um acordo. As ordens abertas por esta EA não devem cruzar as outras ordens abertas manualmente ou por outra EA, ou seja, a EA deve trabalhar de forma independente.
Eu pesquisei em toda a Internet. É um tema bastante trivial, mas há muitas variações. Parece ser uma coisa simples, e não se encontra em nenhum lugar.
Na primeira mensagem, o código. É simples: quebrar a alta/baixa anterior - abrir um comércio. As ordens abertas por esta EA não devem se sobrepor com outras ordens abertas manualmente, ou com aquelas abertas por outra EA, ou seja, a EA deve trabalhar independentemente.
Eu pesquisei em toda a Internet. É um tema bastante trivial, mas há muitas variações. Parece ser uma coisa simples, e não se encontra em nenhum lugar.
em vez de retornar(0) o significado deve ser continuado