[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 829
dimon74: Pode ser útil!!! Tente baseá-lo em um preço: diga Bid. O preço de abertura para OP_SELLSTOP será Bid , e para OP_BUYSTOP - Bid+87*Point (ou o que você precisar).
Por favor, ajude. Talvez alguém saiba como implementar uma função no código, que compara o penúltimo valor da história com o último (estamos falando de posições fechadas), não importa qual valor (por exemplo OrderCloseTime()), e se forem diferentes (neste caso, o penúltimo é menor que o último) - fazer um BLA-BLA-BLA. Se possível, refine meu código, ou escreva o seu, se você o tiver na direção errada.
double C_T_L_C_P() {
datetime t;
double r=0;
int i, k=OrdersHistoryTotal(), q=0;
if (q==0)
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
Após a primeira unidade aparecer no ciclo, verifique se esta unidade irá aguentar por tempo t+t1 (verifique a cada delta de segundos). Se ele se mantém, nós o compramos, e se em algum momento ele não se mantém, nós saímos do loop. Em outras palavras, o sinal é válido, se foi verificado a cada intervalo delta e sempre foi um.
Estou pensando corretamente?
if(sign0==1) //проверка начинаертя только после появления 1
{
t=TimeCurrent(); //фиксируем время//в цикле от t до t+t1 через каждые дельта секундwhile(t<t+t1) //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
{
if(sign0==1) //еще паз проверка наличия 1
sign1=1; //новой переменой присваиваем 1else
{sign1=0;break;} // если нет присваиваем 0 и заканчиваем цикл
t=t+delta; //проверяем через каждые дельта секунд
}
if(sign1==1) op="BUY";
return;
}
Após a primeira unidade aparecer no ciclo, verifique se esta unidade irá aguentar por tempo t+t1 (verifique a cada delta de segundos). Se ela se mantém, então compramos, e se em algum momento ela não se mantém, então saímos do laço.
Estou pensando corretamente?
O resultado é um loop infinito (t é sempre <t+t1, somente se t1=0). No sinal do laço1 sempre =1
Para corrigir o erro, o algoritmo deve ser detalhado
Um sinal binário 0 ou 1 é recebido. Se um 1 for recebido, então a partir deste momento começamos a verificar se ele se manterá por 10 min (600 seg), verificando a cada 60 seg. Se todos os 10 minutos houve um 1, então compre, e se pelo menos uma vez não houve 1, então termine de verificar e considere que não há sinal para abrir.
Um sinal binário 0 ou 1 é recebido. Se um 1 for recebido, então a partir deste momento começamos a verificar se ele se manterá por 10 minutos (600 segundos), verificando a cada 60 segundos. Se todos os 10 minutos fossem um - Comprar, e se pelo menos uma vez não foi um, então termine a verificação e considere que não há sinal para abertura.
Não está claro no código como o sinal discreto0 muda. No código apresentado, o sinal não muda. Há uma tentativa fracassada de trabalhar com t
void CheckForOpen()
{
int res;
datetime t;
int sign=0;
//---- go trading only for first tiks of new bardouble tr0=iCustom(NULL,0,"trd",0,0);
double tr1=iCustom(NULL,0,"trd",1,0);
//---- sell conditionsif(tr1==1)
{
t=TimeCurrent();
while(t<t+tim)
{
if(tr1==1)
sign=-1;
else
{sign=0;break;}
t=t+delta;
}
if(sign==-1)
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
return;
}
Pode ser útil!!! Tente baseá-lo em um preço: diga Bid. O preço de abertura para OP_SELLSTOP será Bid , e para OP_BUYSTOP - Bid+87*Point (ou o que você precisar).
Agora um mágico, os parâmetros estão definidos para
Por favor, ajude. Talvez alguém saiba como implementar uma função no código, que compara o penúltimo valor da história com o último (estamos falando de posições fechadas), não importa qual valor (por exemplo OrderCloseTime()), e se forem diferentes (neste caso, o penúltimo é menor que o último) - fazer um BLA-BLA-BLA. Se possível, refine meu código, ou escreva o seu, se você o tiver na direção errada.
double C_T_L_C_P() {
datetime t;
double r=0;
int i, k=OrdersHistoryTotal(), q=0;
if (q==0)
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (t<OrderCloseTime()) {r=OrderCloseTime();}
}}}
return (r);}
OBRIGADO DE ANTEMÃO!!!
Ajuda na verificação.
Após a primeira unidade aparecer no ciclo, verifique se esta unidade irá aguentar por tempo t+t1 (verifique a cada delta de segundos). Se ele se mantém, nós o compramos, e se em algum momento ele não se mantém, nós saímos do loop. Em outras palavras, o sinal é válido, se foi verificado a cada intervalo delta e sempre foi um.
Estou pensando corretamente?
Ajuda na verificação.
Após a primeira unidade aparecer no ciclo, verifique se esta unidade irá aguentar por tempo t+t1 (verifique a cada delta de segundos). Se ela se mantém, então compramos, e se em algum momento ela não se mantém, então saímos do laço.
Estou pensando corretamente?
O resultado é um loop infinito (t é sempre <t+t1, somente se t1=0). No sinal do laço1 sempre =1
O resultado é um loop infinito (t é sempre <t+t1, somente se t1=0). No sinal do laço1 sempre =1
Como corrigir o erro ?
Como corrigir um erro ?
Para corrigir um erro, é preciso detalhar o algoritmo (não o código, mas o algoritmo). E então sobreponha o código no algoritmo
Para corrigir o erro, o algoritmo deve ser detalhado
Um sinal binário 0 ou 1 é recebido. Se um 1 for recebido, então a partir deste momento começamos a verificar se ele se manterá por 10 min (600 seg), verificando a cada 60 seg. Se todos os 10 minutos houve um 1, então compre, e se pelo menos uma vez não houve 1, então termine de verificar e considere que não há sinal para abrir.
Um sinal binário 0 ou 1 é recebido. Se um 1 for recebido, então a partir deste momento começamos a verificar se ele se manterá por 10 minutos (600 segundos), verificando a cada 60 segundos. Se todos os 10 minutos fossem um - Comprar, e se pelo menos uma vez não foi um, então termine a verificação e considere que não há sinal para abertura.
Não está claro no código como o sinal discreto0 muda. No código apresentado, o sinal não muda. Há uma tentativa fracassada de trabalhar com t