[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 741
bool b=0,s=0, //соответственно бай или селл
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;// то же по ТПdouble bl=0,sl=0; // лоты соответсвенно для бай и селлfor(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol())
{ if (OrderType() == OP_BUY ) {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL) {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
}
}
}
}//endif(bs==1||bl==1)
{
NewOrder1(OP_BUYLIMIT,Lot);
Today=TimeDay(TimeCurrent());}
int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофитdouble SL=0; //стоплоссdouble PR=0; //Ценаdouble LT=0; //Лотwhile(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
{PR=Ask-Point*h;
if(TakeProfit>0) TP=PR+TakeProfit*Point;
if(StopLoss>0) SL=PR-StopLoss*Point;
if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
if(tic1<0) Print(GetLastError());
return(0);}
artmedia70: As variáveis booleanas não são inicializadas inicialmente como falsas, em geral, antes de entrar no laço, fixe-as em zero (falsas) - quando você sair do laço, elas terão os valores atribuídos a elas no laço (melhor verdadeiro que 1) e continuarão a ter estes valores até a próxima entrada no laço. Se a abertura de uma ordem depende estritamente dos valores dessas variáveis, então, após a ordem de abertura, verifique a presença dessa posição no mercado, e se ela estiver presente, defina as variáveis para zero (falso)
artmedia70: Compare o valor ADX na barra atual (ou de preferência a primeira barra) com o valor ADX na barra anterior (de preferência a segunda barra).
Se for simples, é algo parecido com isto:
Mas não é muito agradável. É melhor atribuir valores ADX a variáveis duplas e trabalhar com as variáveis...
Amigos! não consigo descobrir como me livrar de sinais desnecessários que aparecem quando a linha de tendência é invertida. A linha de tendência (descendente no exemplo) é traçada do maior extremo para o menor extremo, encontrada dentro de um intervalo especificado de barras. O problema é que, assim que aparece um novo extremo mais baixo, a linha de tendência salta para esse extremo (é projetada dessa forma).
Mas, também na primeira barra, a linha de tendência constrói níveis com o valor da linha de tendência, cujo cruzamento pela linha indicadora dá um sinal. Se a linha indicadora na primeira barra estiver abaixo deste nível e na segunda barra estiver acima deste nível, então temos um crossover de cima para baixo.
Então... Quando a linha de tendência salta para um novo extremo mais baixo, surge uma situação em que a linha indicadora na segunda barra está acima da linha de tendência e abaixo do nível traçado, enquanto na primeira barra está abaixo, ou seja, um sinal de venda desnecessário (neste caso):
Na figura você pode ver como a linha de tendência saltou para um novo extremo (a localização é marcada com uma seta para baixo) e o nível de preço da nova linha de tendência na primeira barra (linha de traço horizontal vermelha) tornou-se inferior à linha AD na segunda barra e a linha AD na primeira barra é inferior ao nível de preço... Assim, ao mover a linha de tendência para um extremo inferior, um sinal indesejado foi simulado. O mesmo sinal desnecessário ocorreu antes - Marquei-o com uma linha vertical azul claro.
Daí a pergunta - como evitar esta situação? Estou exausto tentando pensar em algo... Alguma idéia? Obrigado... :)
Diga-me como isso pode ser implementado em meu pedido ?
Que função devo inserir em meu pedido para zerá-lo?
Simplesmente após verificar se a ordem está no mercado, atribuir valores às variáveis. Por exemplo, Variable1 = false; Essas variáveis que você definiu como "true" no laço, que foi o critério para fazer o pedido, devem ser definidas novamente como "false" depois que o pedido for feito, caso contrário, os pedidos continuarão a ser feitos em lotes. Portanto, você deve atribuir estas variáveis a "falso".
artmedia70: Após verificar se há uma ordem no mercado, basta atribuir valores às variáveis. Por exemplo, Variable1 = falso; Essas variáveis que você definiu como "verdadeiras" no loop, que era o critério para fazer o pedido, devem ser novamente definidas como "falsas" depois que o pedido for feito. Portanto, você deve atribuir estas variáveis a "falso".
Devo dizer que estou a pé há dois dias tentando descobrir o que colocar a partir do que você disse, então não entendi nada. Você se importaria de colocar estes valores no código que coloquei ou apenas escrever uma função e me dizer exatamente onde colocá-la - esta é a última parte do meu enigma e não consigo descobrir onde e como colocá-la.
Devo dizer que não durmo há dois dias e lutei com o Expert Advisor porque não entendo o que e onde colocar o que você disse, você pode colocar esses valores no código que coloquei ou apenas escrever a função e dizer exatamente onde colocá-la é a última peça do meu quebra-cabeça e não consigo focalizar onde e como colocá-la
Não quero mexer com seu código (malvado, mas honesto :)). Diga-me exatamente o que você quer obter como resultado e eu lhe escreverei a função que você precisa. Honestamente - será mais fácil para mim. Eu deveria ordenar meu próprio código... :)
... Ou vá para a cama, vá dormir e no dia seguinte todos os seus quebra-cabeças se juntarão... :) É isso que eu faço quando não entendo... A propósito, vou para a cama - são cinco e meia da manhã.
Tenho-o no escritório do especialista.
As variáveis booleanas não são inicializadas inicialmente como falsas, em geral, antes de entrar no laço, fixe-as em zero (falsas) - quando você sair do laço, elas terão os valores atribuídos a elas no laço (melhor verdadeiro que 1) e continuarão a ter estes valores até a próxima entrada no laço. Se a abertura de uma ordem depende estritamente dos valores dessas variáveis, então, após a ordem de abertura, verifique a presença dessa posição no mercado, e se ela estiver presente, defina as variáveis para zero (falso)
e no código você pode esboçar
Compare o valor ADX na barra atual (ou de preferência a primeira barra) com o valor ADX na barra anterior (de preferência a segunda barra).
Se for simples, é algo parecido com isto:
Mas não é muito agradável. É melhor atribuir valores ADX a variáveis duplas e trabalhar com as variáveis...Amigos! não consigo descobrir como me livrar de sinais desnecessários que aparecem quando a linha de tendência é invertida. A linha de tendência (descendente no exemplo) é traçada do maior extremo para o menor extremo, encontrada dentro de um intervalo especificado de barras. O problema é que, assim que aparece um novo extremo mais baixo, a linha de tendência salta para esse extremo (é projetada dessa forma).
Mas, também na primeira barra, a linha de tendência constrói níveis com o valor da linha de tendência, cujo cruzamento pela linha indicadora dá um sinal. Se a linha indicadora na primeira barra estiver abaixo deste nível e na segunda barra estiver acima deste nível, então temos um crossover de cima para baixo.
Então... Quando a linha de tendência salta para um novo extremo mais baixo, surge uma situação em que a linha indicadora na segunda barra está acima da linha de tendência e abaixo do nível traçado, enquanto na primeira barra está abaixo, ou seja, um sinal de venda desnecessário (neste caso):
Na figura você pode ver como a linha de tendência saltou para um novo extremo (a localização é marcada com uma seta para baixo) e o nível de preço da nova linha de tendência na primeira barra (linha de traço horizontal vermelha)
tornou-se inferior à linha AD na segunda barra e a linha AD na primeira barra é inferior ao nível de preço...
Assim, ao mover a linha de tendência para um extremo inferior, um sinal indesejado foi simulado. O mesmo sinal desnecessário ocorreu antes -
Marquei-o com uma linha vertical azul claro.
Daí a pergunta - como evitar esta situação? Estou exausto tentando pensar em algo...
Alguma idéia? Obrigado... :)
Muito obrigado por sua ajuda:)
Logo no início da função de início, acrescente uma linha de chamada a esta função:
O conselheiro será ativado 1 vez, apenas em um novo bar.Prezado Anatoly. Muito obrigado por este código. Outra pergunta, como fazer com que funcione o tempo todo, mas pode fazer apenas 1 negócio em um bar?
após uma ordem para abrir uma ordem, verificar se a posição já está no mercado e, se estiver, redefinir as variáveis (falso)
Diga-me como isso pode ser implementado em meu pedido ?
Que função devo inserir em meus pedidos para redefini-los a zero?
Diga-me como isso pode ser implementado em meu pedido ?
Que função devo inserir em meu pedido para zerá-lo?
Essas variáveis que você definiu como "true" no laço, que foi o critério para fazer o pedido, devem ser definidas novamente como "false" depois que o pedido for feito, caso contrário, os pedidos continuarão a ser feitos em lotes. Portanto, você deve atribuir estas variáveis a "falso".
Após verificar se há uma ordem no mercado, basta atribuir valores às variáveis. Por exemplo, Variable1 = falso;
Essas variáveis que você definiu como "verdadeiras" no loop, que era o critério para fazer o pedido, devem ser novamente definidas como "falsas" depois que o pedido for feito. Portanto, você deve atribuir estas variáveis a "falso".
Devo dizer que estou a pé há dois dias tentando descobrir o que colocar a partir do que você disse, então não entendi nada. Você se importaria de colocar estes valores no código que coloquei ou apenas escrever uma função e me dizer exatamente onde colocá-la - esta é a última parte do meu enigma e não consigo descobrir onde e como colocá-la.
Devo dizer que não durmo há dois dias e lutei com o Expert Advisor porque não entendo o que e onde colocar o que você disse, você pode colocar esses valores no código que coloquei ou apenas escrever a função e dizer exatamente onde colocá-la é a última peça do meu quebra-cabeça e não consigo focalizar onde e como colocá-la
Não quero mexer com seu código (malvado, mas honesto :)). Diga-me exatamente o que você quer obter como resultado e eu lhe escreverei a função que você precisa. Honestamente - será mais fácil para mim. Eu deveria ordenar meu próprio código... :)
... Ou vá para a cama, vá dormir e no dia seguinte todos os seus quebra-cabeças se juntarão... :) É isso que eu faço quando não entendo... A propósito, vou para a cama - são cinco e meia da manhã.