[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

 

Tenho-o no escritório do especialista.

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;}
            }
         }
      }


}//end

if(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)

e no código você pode esboçar

 
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...






Muito obrigado por sua ajuda:)
 

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... :)

 
profitinvesting:
Muito obrigado por sua ajuda:)
De nada :)
 
ToLik_SRGV:

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?
 
artmedia70:
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?

 
FoxUA:

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.

 
FoxUA:

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ã.