int GetMagic(Order &order)
{
int magic = 0;
if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)for(int i = OrdersTotal(); i > 0 ; i --)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
{
if(magic == OrderMagicNumber()) magic+=1;
else magic=0;
}
}
}
return (magic);
}
Isso o resolveu, eu tinha se (order.cmd == OP_SELLSTOP || OP_BUYSTOP) apenas o problema não foi resolvido. Mas preciso que ele passe por todas as ordens. O mago em si é definido quando apenas a rolha é criada. Não podemos entender que a rolha é criada pelo OrderType() porque ainda não foi criada; temos um registro preliminar do tipo de pedido em ordem.cmd para isso. E aqui precisamos de dois loops: um aninhado no outro, para que uma iteração da magia variável seja verificada com todas as ordens da OrderTotal(). Tenho tudo isso implementado, só que há um loop infinito, não sei por que ...
Nerd Trader #: Tudo bem, eu tinha if (order.cmd == OP_SELLSTOP || OP_BUYSTOP) Mas eu preciso que todas as ordens sejam aprovadas. O mago em si é definido quando apenas a rolha é criada. Não podemos saber que a rolha é criada por OrderType() já que ainda não foi criada, precisamos escrever o tipo de pedido em order.cmd com antecedência. E aqui precisamos de dois loops: um aninhado no outro, para que uma iteração da variável mágica seja verificada com todas as ordens de OrderTotal()
void OpenOrder(int db = -1){
if(db == -1){
Print("'db' должен иметь корректное значение");
return;
}
Order order;
//Если бид в границах ДБ (его хай/лоу) то инициализируем ордер для селстопа или байстопаif(Bid > db_last.low && Bid < db_last.hight){
if(db == BEAR) order.InitForSell(SELLSTOP);
if(db == BULL) order.InitForBuy(BUYSTOP);
}
...
if(order.is_init == true)
{
int order_send = OrderSend(Symbol(), order.cmd, 0.01, order.open_price, 10,
order.sl_price, order.tp_price, "", GetMagic(order), 0, order.arrow_color);
if(order_send == -1){
Print(order.error_text," | ",GetLastError()," db_last.third ",db_last.third,
" | db_last.size_open_to_low ",db_last.size_open_to_low," | order.sl_price: ",
order.sl_price," | order.cmd ",order.cmd);
ResetLastError();
return;
}
}
}
...
int GetMagic(Order &order)
{
int magic = 0;
//Если должен быть открыт стопордер и если есть уже открытые или отложенные //ордера, то возможно некоторые с маджиком, это надо проверить и сгенерировать //для нашего ордера уникальный маджик и отправить его на запись в массивif(order.cmd == OP_SELLSTOP || OP_BUYSTOP)
if(OrdersTotal() >= 1)
for(;;){
magic++;
for(int i = OrdersTotal(); i > 0 ; i --)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) != false)
if(magic != OrderMagicNumber())
return magic;
}
//Если нет открытых или отложенных ордеров то увеличиваем значение //маджика, чтобы он равнялся единице и отправляем на запись в массивelseif (OrdersTotal() == 0)
return (magic + 1);
return magic;
}
Diz no comentário que envia o majic para a matriz de escrita, portanto não se deixe enganar por isso, desde que o majic volte para o retorno.
isto é uma piada?
Você o tem em preto e branco para(;;)
Bem, sim, só há uma saída: quando a magia não se iguala à magia da ordem.
Tente isto
E se houver uma grade de ordens?
Alguém tem uma função para calcular a soma de todas as trocas de uma grade de ordens por uma ordem mágica e um instrumento financeiro?
Obrigado pela ajuda!!!
Para que você precisa dele?
Ao fechar uma grande grade de pedidos com uma longa vida útil, as trocas de pedidos se transformam em lucros e distorcem muito o resultado.
Quero compensar a perda em swaps com esta função.
Ao fechar uma grande grade de pedidos com uma longa vida útil, as trocas de pedidos se transformam em lucros e distorcem muito o resultado.
Quero compensar a perda em swaps com esta função.
Tente isto
Mas preciso que ele passe por todas as ordens. O mago em si é definido quando apenas a rolha é criada. Não podemos entender que a rolha é criada pelo OrderType() porque ainda não foi criada; temos um registro preliminar do tipo de pedido em ordem.cmd para isso. E aqui precisamos de dois loops: um aninhado no outro, para que uma iteração da magia variável seja verificada com todas as ordens da OrderTotal(). Tenho tudo isso implementado, só que há um loop infinito, não sei por que ...
A grade está fechada com lucro ou com o breakeven?
Sim, a um certo nível de drawdown, há uma perda a zero e a nenhuma perda há uma perda feia devido a swaps
Tudo bem, eu tinha if (order.cmd == OP_SELLSTOP || OP_BUYSTOP)
Mas eu preciso que todas as ordens sejam aprovadas. O mago em si é definido quando apenas a rolha é criada. Não podemos saber que a rolha é criada por OrderType() já que ainda não foi criada, precisamos escrever o tipo de pedido em order.cmd com antecedência. E aqui precisamos de dois loops: um aninhado no outro, para que uma iteração da variável mágica seja verificada com todas as ordens de OrderTotal()
Sim, a um certo nível de drawdown, há uma perda a zero e a nenhuma perda há uma perda feia devido a swaps