O Attached faz parte de um Expert Advisor em que tenho trabalhado para examinar uma eégia de negociação, mas estou tendo alguma dificuldade com as limitações do MQL4 ao lidar com arrays. O que eu quero é usar uma matriz para armazenar informações sobre as situações que tenho abertas e além de redefinir os valores dos elementos. O que eu quero implementar é uma série de 3 funções que reconstrói a coleção de pedidos abertos. Isso pode ser feito após o fechamento ou a abertura de todas as posições. A próxima função deve classificar as ordens em aberto de acordo com seus respectivos preços de abertura. A função sequencial seria reavaliar o stop loss e obter valores de lucro. Os valores para evitar perdas e obter valores de lucro devem basear-se no preço inicial do pedido. Eu desejei que o EA executasse os valores de stop loss e take profit. Estou ciente de que há riscos em estabelecer um EA dessa maneira e, com isso, quero prosseguir.
Double OrderStack [7] [9];/Matriz de informações do pedido
if ((OrderStack [TotalOrders 1] [1] lt; Licitação) (TotalOrders lt; 2))/Abre a nova posição de Venda a preço mais favorável
//3
TicketNum = OrderSend (símbolo (), OP_SELL, LotSize2, lance, 3,0,0, CommentString, 0,0, vermelho);/Abra este pedido.
Se (TicketNumlt; 0)
//4
Imprimir (Comércio de abertura de erro: Código de erro =, GetLastError (), Lotesize:, Lotes);
//3
outro
//4
if (OrderSelect (TicketNum, SELECT_BY_TICKET))
//5
Imprimir (ordem de venda aberta ao preço:, OrderOpenPrice ());
OrderFlags = 1;/Usado pela função primária do EA para observações
Terminal();/Chame para a função que produz uma matriz de dados de ordem aberta
//4
//3
//2
}/1
}/0
//------------------------------------------------ --------------------
//Terminal.mqh
//------------------------------------------------ ------------------------------ 1 -
//Ordem da função de contabilidade
//Variáveis globais:
//OrderStack [7] [9]
//O último array de pedidos conhecidos
//1º índice = número do pedido
//[] [0] não definido
//[] [1] ordem de preço aberto (abs. Valor do preço)
//[] [2] StopLoss desta ordem (estômago) Valor de preço)
//[] [3] TakeProfit desta encomenda (estômago) Valor de preço)
//[] [4] número do pedido
//[] [5] volume de pedidos em lotes (abs. Valor de preço)
//[] [6] formulário de pedido 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
//[] [7] ordem número mágico
//[] [8] 0/1 acessibilidade de observação
//Mas_Tip [6]
//Matriz do número de pedidos de todos os tipos
//[] formulário de pedido: 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
//------------------------------------------------ ------------------------------ 2 -
baralho duplo ()
//1
int Mas_Tip [6];
int Qnt = 0;
int eu;
//Orders counter
//------------------------------------------------ ------------------------------ 3 -
ArrayInitialize (OrderStack, 0,0);/Zerar a seleção
ArrayInitialize (Mas_Tip, 0);/Zeroize o array
//------------------------------------------------ ------------------------------ 4 -
for (I = 0; I lt; OrdersTotal (); I )/Para ordens de mercado e pendentes
//2
if ((OrderSelect (I, SELECT_BY_POS) == verdadeiro) (OrderSymbol () == Símbolo ()))
//Quando houver o seguinte. . E o nosso par de moedas
//3
//------------------------------------------------ --------------------- 5 -
Qnt ;/Quantidade de pedidos
OrderStack [Qnt] [1] = OrderOpenPrice ();/Ordem de preço aberto
OrderStack [Qnt] [2] = OrderStopLoss ();/preço do SL
OrderStack [Qnt] [3] = OrderTakeProfit ();/preço TP
OrderStack [Qnt] [4] = OrderTicket ();/Número do pedido
OrderStack [Qnt] [5] = OrderLots ();/Quantidade de lotes
Mas_Tip [OrderType ()] ;/Quantidade de pedidos do tipo
OrderStack [Qnt] [6] = OrderType ();/Tipo de pedido
OrderStack [Qnt] [7] = OrderMagicNumber ();/Número mágico
if (OrderComment () ==)
//4
OrderStack [Qnt] [8] = 0;/Se não há absolutamente nenhum comentário
//3
outro
//4
OrderStack [Qnt] [8] = 1;/Se houver um comentário
//3
//2
//------------------------------------------------ --------------------- 6 -
OrderStack [0] [0] = Qnt;/Quantidade de pedidos
//------------------------------------------------ ------------------------------ 7 -
FillStack (OrderStack, Trend_Up);/Chamar para a função que classifica os dados de negociação aberta com base na direção da tendência e no preço inicial do comércio
retorno (0);
//1
//0
//------------------------------------------------ ------------------------------ 8 -
//
//Existing Orders Sorting Function
//
double SortStack (double OrderStack [7] [9], bool Trend_Up)/Função para classificar o array de ordem reconstruída em
//ordem com base no preço inicial da ordem aberta
//1
int eu, TotalOrders;
TotalOrders = OrderStack [0] [0];
if (Trend_Up == true)
//2
ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_DECEND);
//1
if (Trend_Up == falso)
//2
ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_ASCEND);
//1
FillStack (OrderStack, Trend_Up);/Chamada para função que define parâmetros de negociação para efeitos adversos
//negociações de mercado no array order
retorno (0);
//0
//
//Registra a Função dos Parâmetros de Negociação de Mercado Adversos
//
double FillStack (double OrderStack [7] [9], bool Trend_Up)/Define os Parâmetros de Negociação de Mercado Adversos
//baseado no pedido inicial do piercing da banda Bollinger
//1
Preço duplo;
PriceIn = OrderStack [1] [1];
//2
if (Trend_Up == true)
//3
OrderStack [1] [2] = Price In - StopLossVal;/Coluna 2, Coluna de entrada Stop Loss
OrderStack [1] [3] = Preço em 0,0030;/Coluna 3, Coluna de entrada de lucro
OrderStack [2] [1] = PreçoIn - 0,0010;/Coluna 1, preço médio de compra para baixo do preço de compra
OrderStack [2] [3] = Preço em - 0,0005;/Coluna 3, Take Profit para Média de Entrada no Mercado
//2
if (Trend_Up == falso)
//3
OrderStack [1] [2] = Preço em StopLossVal;/Coluna 2, Coluna de entrada Stop Loss
OrderStack [1] [3] = Preço em - 0,0030;/Coluna 3, Coluna de entrada de lucro
OrderStack [2] [1] = PreçoIn 0,0010;/Coluna 1, preço médio de compra para baixo do preço de compra
OrderStack [2] [3] = Preço em 0,0005;/Coluna 3, Take Profit para Média de Entrada no Mercado
//2
//1
retorno (0);
//0
O problema que estou tendo com a implementação deste EA é que o compilador me dá mensagens de erro sobre ”o item de matriz não pode ser atribuído” para o código na minha função FillStack (). O que é desconcertante é que parece que é precisamente o que está sendo feito a partir da função Terminal () acima da minha função FillStack (). Eu estou esperando que um desses programadores experientes possa me dar uma cura para esse bug.
É difícil acreditar que, com todas as semelhanças que o MQL4 tem em C , a capacidade de atribuir valores a elementos de matriz como C também não existiria no MQL4. Obrigado.