Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Eu sei que o problema está me encarando bem, mas não consigo vê-lo...
O problema que eu tenho é que estou tentando fechar parcialmente o mesmo "OP_BUY" ou "OP_SELL" até 4 vezes a preços diferentes... Eu acho que a pergunta que eu deveria estar fazendo é, posso conseguir uma maneira, onde por mim tenho uma regra de que TODOS os fechamentos parciais (de qualquer lote e preço em UM determinado comércio) só fechará parcialmente UMA VEZ em seus parâmetros pré-definidos de "OrderClose()"...
Desta forma, estou olhando para fazer isso agora com a comparação do OrderOpenTime() funcionará essencialmente apenas uma vez, e restringirá qualquer outro tipo de função OrderClose() de acontecer em tudo... Quero encontrar uma maneira de aplicar uma regra a 4 funções OrderClose()... (se isso faz sentido?)
Sei que as pessoas estão sugerindo abrir 4 ordens, mas sem ir muito fundo, é menos eficiente para mim fazer isso dessa maneira.
Por que não ter simplesmente uma matriz bidimensional que armazena o número do ingresso e o número de fechamentos parciais disponíveis que restam para realizar.
Esboço/Pseudocódigo:
1. definir matriz bidimensional estática: cOrders[][2].
2. para cada novo pedido inserido: redimensionar a primeira dimensão do pedido para o tamanho+1, colocar o número do novo pedido em [x][0] e o número de fechamentos parciais disponíveis para realizar (neste caso, 4) em [x][1].
3. em qualquer intervalo de tempo (por exemplo, cada início()), faça um loop através da matriz, selecione cada pedido usando o número de bilhete armazenado, e determine se um fechamento parcial precisa ser realizado.
4. se for necessário executar um fechamento parcial (ver passo 3), fechar parcialmente a ordem usando OrderClose() e atualizar as ordens[x][0] para refletir o novo número do bilhete e reduzir as ordens[x][1] em 1.
5. Remova de cOrders quaisquer ordens que tenham sido fechadas ou que seu número de fechamentos parciais ainda a serem realizados seja 0.
O único problema é o que fazer quando a plataforma/computador é reiniciada. Você poderia armazenar essas informações em um arquivo e ler o arquivo no init() quando a plataforma for reiniciada.
Por que não ter simplesmente uma matriz bidimensional que armazena o número do ingresso e o número de fechamentos parciais disponíveis que restam para realizar.
Esboço/Pseudocódigo:
1. definir matriz bidimensional estática: cOrders[][2].
2. para cada novo pedido inserido: redimensionar a primeira dimensão do pedido para o tamanho+1, colocar o número do novo pedido em [x][0] e o número de fechamentos parciais disponíveis para realizar (neste caso, 4) em [x][1].
3. em qualquer intervalo de tempo (por exemplo, cada início()), faça um loop através da matriz, selecione cada pedido usando o número de bilhete armazenado, e determine se um fechamento parcial precisa ser realizado.
4. Se for necessário executar um fechamento parcial (ver passo 3), fechar parcialmente a ordem usando OrderClose() e atualizar as ordens[x][0] para refletir o novo número do bilhete e reduzir as ordens[x][1] em 1.
5. Remova de cOrders quaisquer ordens que tenham sido fechadas ou que seu número de fechamentos parciais ainda a serem realizados seja 0.
O único problema é o que fazer quando a plataforma/computador é reiniciada. Você poderia armazenar essas informações em um arquivo e ler o arquivo no init() quando a plataforma for reiniciada.
Não faço idéia de como usar partes do número mágico para definir parâmetros diferentes? Acho que usar OrderOpenTime() não será uma rota lógica... Não posso acreditar quanto tempo este fio está ficando longo. Lol.
Juro por Deus que vou fazer um fio sobre isto uma vez que eu (com muita ajuda de todos!) o tenha rachado.
Acho que a maneira mais fácil de fazer isto é com Números Mágicos . . usar partes do número para definir parâmetros diferentes, por exemplo: número de peças, número do pedido, dia, mês, número EA . . todas as peças teriam o mesmo Número Mágico e poderiam ser facilmente rastreadas na História. Presumo que a parte fechada e a parte aberta que restam têm ambas o mesmo Número Mágico . .
O uso do Número Mágico para codificar pedaços de informação é bastante possível, mas vejo algumas limitações possíveis. Primeiro, o Número Mágico é um int e, portanto, tem 10 dígitos onde o dígito mais esquerdo pode ser apenas 1 ou 2 (e se o dígito mais esquerdo for 2, o segundo dígito mais esquerdo deve ser 7 ou menos). Em segundo lugar, pode levar mais tempo por início() para rever todo o histórico para encontrar todas as partes de cada ordem apenas para determinar se a ordem atual precisa (ou pode ser) parcialmente fechada. Só não tenho certeza se esse tempo adicional seria trivial ou não.
Espere, eu não posso ter apenas vários números mágicos? Use um para o OrderSend() inicial, um para o OrderModify(), depois que metade da posição for fechada no primeiro alvo de 1:1, modificar a ordem para mudar o MagicNumber? Portanto, quando eu estiver procurando fechar pela primeira vez a metade a 1:1, ela só fechará 1:1, desde que o "OP_BUY" atualmente aberto corresponda ao número mágico que eu lhe dei pela primeira vez? Depois de ter fechado parcialmente, modificar e mudar esse número mágico?!
Lol? Isso não é realmente simples?!
ATUALIZAÇÃO: obviamente preciso parar de olhar para isso hoje - você não pode modificar um MagicNumber - mas gostaria que você pudesse, porra... (facepalm) - você poderia imaginar como tudo isso seria muito mais fácil...
Espere, eu não posso ter apenas vários números mágicos? Use um para o OrderSend() inicial, um para o OrderModify(), depois que metade da posição for fechada no primeiro alvo de 1:1, modificar a ordem para mudar o MagicNumber? Portanto, quando eu estiver procurando fechar pela primeira vez a metade a 1:1, ela só fechará 1:1, desde que o "OP_BUY" atualmente aberto corresponda ao número mágico que eu lhe dei pela primeira vez? Depois de ter fechado parcialmente, modificar e mudar esse número mágico?!
Lol? Isso não é realmente simples?!
Não. Primeiro, após o OrderSend() inicial, você não pode adicionar/modificar o Número Mágico usando OrderModify(). Segundo, quando você faz um fechamento parcial da ordem usando OrderClose(), a nova ordem (eu assumo) recebe o mesmo Número Mágico que a ordem antiga.
Não. Primeiro, após o OrderSend() inicial, você não pode adicionar/modificar o Número Mágico usando OrderModify(). Segundo, quando você faz um fechamento parcial da ordem usando OrderClose(), a nova ordem (eu assumo) recebe o mesmo Número Mágico que a ordem antiga.
Sim. Percebi o quão retardado estou sendo. Dia longo!
Sim, após o primeiro fechamento parcial, ainda é atribuído à posição restante o mesmo número mágico com o qual começou.
Agora está realmente me frustrando... Se ao menos eu pudesse modificar o número mágico, seria muito fácil!? Tem que haver uma maneira lógica de fechar parcialmente uma posição ONCE - e fazê-lo várias vezes a qualquer preço pré-definido especificado no OrderClose() - Tem que haver uma atualização que nos permita modificar o MagicNumber()!
Você não está pensando de forma lógica.
1. Como modificar o número mágico o ajudaria mais do que conhecer o OrderOpenTime() ? Ele é exatamente a mesma coisa que um identificador para essa ordem.
2. Por que você está convertendo-o para o formato dia/hora/minuto com timetostr ? O OrderOpenTime() já está no formato timestamp que se parece com este: 1375356521 representa o tempo exato para o segundo quando o pedido foi aberto.
Se você pudesse mudar o número mágico, compararia o número mágico do pedido para ter certeza de que ele não tem o número mágico que significa que ele já estava parcialmente fechado corretamente ?
Se você pudesse fazer isso, por que não comparar o OrderOpenTime da ordem com o timestamp que você sabe que significa que é uma ordem que já estava parcialmente fechada ?
data/hora estática já encerrada;
se a ordem de fechamento da peça for bem sucedida
já fechado = OrderOpenTime();
quando o pedido atende aos critérios de fechamento de peças
if(OrderOpenTime() != já fechado )
Se você estiver administrando várias ordens abertas ao mesmo tempo, use uma matriz[] para manter cada carimbo de tempo de ordens fechadas de peças.