Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1174

 
Valeriy Yastremskiy:

OrderSelect no bilhete foi feita anteriormente. O pedido está pendente. Como obter o pedido tornou-se comercializável, a não ser verificando o tipo de pedido em cada carrapato. Nos registros, este tempo é registrado, mas parece que o campo para este tempo na estrutura da ordem não é fornecido, ou estou errado? Quando mudamos o tipo de ordem, OrderTotal() e OrderHistoryTotal também não mudam, se eu entendi corretamente.

O resto das questões parecem ser claras para mim)

Você já tentou OrderOpenTime? Nem me lembro se ele muda quando uma posição é acionada.

Não sei quando é necessário verificar se a ordem pendente acionou cada tique(e não antes da ação chave ou a cada 1...5 min), mas o MT4 não tem outra maneira.

No MT5, é mais conveniente. Em OTT você descobre sobre a transação, se precisar trabalhar com listas você faz o processamento em OTT

 
datetime some_time=TimeCurrent();

extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)

extern double P=15;       //Таймфрейм

int start()

{

//Инициализация переменных

bool  FractalsUp=false;

bool  FractalsDown=false;

int   FractalsUpPrice=0;

int   FractalsDownPrice=0;

int   FractalsLimit=100;

double EMA=iMA(NULL,P,5,3,MODE_EMA,PRICE_CLOSE,0);

   //Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.

   for (int i=FractalsLimit; i>=0; i--)

{

      //Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.

      double fu=iFractals(NULL,0,MODE_UPPER,i);

      double fl=iFractals(NULL,0,MODE_LOWER,i);

      //Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.

      if(fu>0)

{

FractalsUp=true;

FractalsDown=false;

FractalsUpPrice=fu;



if (((Close[0])>fu)&&(OrdersTotal() == 0)&&(Close[0]>Open[0])&&(Close[0]>High[1]&&(Close[0]>EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd=OrderCloseTime();

int hd=+iBarShift(Symbol3,P,Cd)+1;

if (hd<=2)

{

return(-1);

}

}



metka1();

}

}

//Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.

      if(fl>0)

{

FractalsUp=false;

FractalsDown=true;

FractalsDownPrice=fl;

if (((Close[0])<fl)&&(OrdersTotal() == 0)&&(Close[0]<Open[0])&&(Close[0]<Low[1]&&(Close[0]<EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd1=OrderCloseTime();

int hd1=+iBarShift(Symbol3,P,Cd1)+1;

if (hd1<=2)

{

return(-1);

}

}

metka2();

}

}

      //Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.

      if(fu>0 && fl>0)

{

         FractalsUp=false;

         FractalsDown=false;

         FractalsUpPrice=fu;        

         FractalsDownPrice=fl;

}

}

return(0);

}

int metka1()

{              

int send1=OrderSend(Symbol3,OP_BUY,0.01,Ask,3,Bid-70*Point,Bid+70*Point);

return(0);

}

int metka2()

{                        

int send2=OrderSend(Symbol3,OP_SELL,0.01,Bid,3,Ask+70*Point,Ask-70*Point);

return(0);

}

Boa tarde!

Estou trabalhando em uma coruja sobre fractais. Há um problema. Ajuda. A essência é esta:

O script busca o último fractal superior ou inferior dos últimos 100 castiçais com variável [FractalsLimit=100;] e abre a posição BUY - se um fractal for quebrado, e vice-versa para SELL.

Os últimos 100 castiçais devem ser usados para encontrar o máximo ou mínimo de fractal e abrir uma posição. Ou seja, concentra-se apenas nos fractais máximos e mínimos, não nos últimos.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Mavrin:

Você já tentou OrderOpenTime? Não me lembro se ele muda quando uma ordem pendente é acionada.

Não sei quando é necessário verificar cada tique(e não antes de ações-chave ou a cada 1...5...minutos) se uma ordem pendente foi acionada, mas não há outra maneira de fazê-lo no MT4.

No MT5, é mais conveniente. Na OTT, você aprende sobre a condução de uma transação. Se você precisar trabalhar com listas, você conduzirá o processamento na OTT.

OrderOpenTime mostra o tempo de abertura de pedidos pendentes. É uma questão de entender mais a operação. Portanto, a hora é escrita no diário de bordo e no diário e não é mostrada em nenhum outro lugar. Respectivamente, se ainda não o consertamos, então podemos vê-lo mais tarde, de acordo com o fato)))))

Se eu entendi corretamente, será a abertura de posição/trato no MT5. Embora eu não entenda a divisão em ordem/comércio/posição como uma solução ótima, há mais dados, é claro.

 
Aleksey Mavrin:

acontece))) 1 fica muito perdido no fundo das letras inglesas l i etc., é mais conveniente chamar então os sufixos 001, 2... etc.

Entendo o que você quer dizer) corrigiu o erro, agora o valor do segundo cabo é 1,0. Se você colocar um prazo maior no primeiro cabo do que no segundo cabo, o valor do segundo cabo é 0. Você pode me dizer o que mais eu preciso consertar para obter o valor do segundo cabo corretamente?

void OnTick()
  {
   double PriceArray[];
   
   int AOhandle = iAO(_Symbol,PERIOD_M15);
   
   ArraySetAsSeries(PriceArray, true);
   
   CopyBuffer(AOhandle, 0, 0, 3, PriceArray);
   
   double AOvalue = NormalizeDouble(PriceArray[0], 6);

   double PriceArray01[];
   
   int AOhandle01 = iAO(_Symbol,PERIOD_H1);
   
   ArraySetAsSeries(PriceArray01, true);
   
   CopyBuffer(AOhandle01, 1, 0, 3, PriceArray01);
   
   double AOvalue01 = NormalizeDouble(PriceArray01[0], 6);
    
   Comment ("Awesome Oscillator Value: ", AOvalue, "\n", "\n",
            "Awesome Oscillator Value: ", AOvalue01);
  }
 
Valeriy Yastremskiy:

OrderOpenTime mostra o tempo de abertura da ordem pendente. É uma questão de entender mais a operação. Acontece que a hora é registrada no diário de bordo e no diário e não é refletida em nenhum outro lugar. Portanto, se não o consertamos, podemos procurar mais tarde, de acordo com o fato)))))

Há uma semana você vem levantando esta questão. Ofereci-me para rever os princípios de colocar ordens na estratégia comercial

mas se esta questão for importante para você, não é um problema "consertá-la" com um reajuste de um carrapato.

Se você quiser tentar, terá que fazê-lo com uma certa velocidade, mas se não tiver um tick real, provavelmente acabará com muitos erros, porque a velocidade de colocar pedidos pendentes é muito maior.


O que eu gostaria de propor para estudar é aCArrayInt SB https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayint

em CArrayInt você adicionará bilhetes e este tipo de dados permitirá apagar facilmente "bilhetes que se tornaram comercializáveis".


como eu escrevi acima - 1 tick, o código de verificação será mínimo

Valeriy Yastremskiy:

Na MT5 será uma abertura de posição / comércio, se eu entender corretamente. Embora eu não entenda a divisão para encomendar / negociar / posicionar como uma solução ótima, mas há mais dados, é claro.

Se você pode escrever para o MT5 - então porque estamos discutindo isso? a plataforma é mais poderosa, a funcionalidade é maior - comparar o MT4 e o MT5 não faz sentido, o MT4 é mais fácil de entrar, mas o MT5 tem mais características

 
Igor Makanu:

Você vem levantando esta questão desde uma semana, sugeri que reconsiderasse os princípios de colocar ordens na estratégia comercial


Eu ainda não entendo. A estratégia é, naturalmente, diferente. A questão vem do fato de que um evento bastante importante só se reflete no registro. E ninguém respondeu diretamente que não há outro lugar senão o registro do tempo em que um pedido se tornou comercializável))))

E a lógica da estratégia não depende do terminal. Se a lógica for coxa, então você certamente poderá inventá-la, mas o coxear não irá embora))))

 
Valeriy Yastremskiy:

Ainda não está claro. A estratégia é, naturalmente, diferente. A questão vem do fato de que um evento bastante importante só se reflete no registro. E ninguém respondeu diretamente que não há outro lugar além do registro da época em que o pedido se tornou mercado))))

não esta informação - nooooo!!!

importância... bem, é importante para você, antes disso, quantos anos de estratégia de escrita e como ela funcionou, mesmo em lucro ;)

como regra, não colocar muitas ordens pendentes, seguir ordens de mercado, se necessário, adicionar uma ordem pendente - ordens pendentes tornam-se ordens de mercado

usamos tudo - média, pirâmide, grade de ordens e ... e muito... Eu não me lembro dessas anticasticas nos fóruns de comerciantes, eu não as leio há mais de um ano - eu tenho mais de meus próprios pensamentos do que os de outras pessoas ))))

 
Igor Makanu:

não existe tal informação - nooooo!!!

importância... bem, é importante para você, antes disso, quantos anos de elaboração de uma estratégia e ela funcionaria, mesmo em lucro ;)

como regra, você não deve colocar muitas ordens pendentes, seguir as ordens de mercado, se necessário, adicionar uma ordem pendente - ordens pendentes tornam-se ordens de mercado

usamos tudo - média, pirâmide, grade de ordens e ... e muito... Se você não sabe, você deve ler estes truques nos fóruns de comerciantes, eu não faço isso há mais de um ano - eu tenho mais pensamentos próprios do que de outros ))))

Obrigado))))

Martin e o cálculo da média é auto-engano e proibitivo (porque você não pode calcular ou prever o risco pela definição das propriedades da BP))))) risco, que às vezes, mas apenas às vezes, é justificado))))

Se a estratégia estiver correta, uma ordem é suficiente))))

 
Valeriy Yastremskiy:

Se a estratégia estiver correta, uma ordem é suficiente))))

Se em seu TS o número de pedidos é estritamente definido, então você não deve ter problemas em determinar o que aconteceu com os pedidos pendentes no tick atual

Saber a hora exata não lhe dará nada - todas as informações são recebidas na chegada do tick - sem tick, sem informações

 

Olá, estou enfrentando um problema, como mudar os parâmetros de um indicador personalizado de um EA. O problema é que quando mudo qualquer parâmetro na lista de indicadores, uma nova cópia é criada. Quando vou às propriedades dessas cópias, cada cópia tem seu próprio parâmetro. Quanto mais eu altero o parâmetro, mais cópias são criadas. Eu o uso através do iCustom.

Por exemplo:

#resource "Indicator.ex4inicator.ex4"

Var1=1;

//------------------------------------------

nulo OnTick()

{

int A;

Var1++;

A=iCustom(Symbol(),PERIOD_CURRENT,"::Indicadores",Var1,0,0);

Como resultado, vemos na lista de indicadores:

Indicador (com parâmetro Var1=2)

Indicador (com parâmetro Var1=3)

Indicador (com parâmetro Var1=4)

.... etc.


Razão: