Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1008

 
Stereosin:
Bom dia a todos. A idéia é colocar ordem pendente em direção oposta para cada ordem de mercado aberto (obter lucro e parar perda) quando a parada de perda for acionada (se ordem de compra, então enviar ordem pendente). Não consigo encontrar nenhuma sequência de sintaxe para escrever um script que apague uma ordem pendente quando a ordem atual fecha com lucro? Talvez haja um roteiro escrito entre os gratuitos, mas a busca não tem sorte ( . Eu mesmo gostaria de escrever um para poder lidar com ele, mas não consigo entender a seqüência de sintaxe. Deixe-me explicar em outro exemplo - eu quero sorvete - a seqüência de sintaxe - 1) - sair do sofá 2) vestir-se 3) ir à loja 4) comprar sorvete. É possível fazer o mesmo pela minha tarefa?

quando o atual é fechado, o número de ordens de compra diminuirá, ou elas estarão ausentes (depende do algoritmo), você faz esta verificação e exclui as ordens pendentes

algo assim (neste caso, ao contrário, as ordens pendentes são eliminadas se uma compra colocada anteriormente tiver fechado com lucro):

 for(int m=OrdersTotal()-1;m>=0;m--)
   if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES)) 
     if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) {  
    
      if(OrderType()==OP_BUY)  sBuy++; 
      if(OrderType()==OP_SELL) sSell++;
       
      if(OrderType()==OP_BUYLIMIT)
       if(sBuy==0 || sSell>0) OrderDelete(OrderTicket());
      if(OrderType()==OP_SELLLIMIT) 
       if(sSell==0 || sBuy>0) OrderDelete(OrderTicket());
  }
 
Ratmirf:

Então isto é correto?

se (OrderOpenTime()+7200+15*60 <=TimeCurrent()) Cls_Buy=verdadeiro;

if (OrderOpenTime()+7200+900 <=TimeCurrent()) Cls_Buy=verdadeiro;

e acabar assim?

se (OrderOpenTime()+8100 <=TimeCurrent()) Cls_Buy=verdadeiro;

Bem, é matemática do ensino médio... Seja um pouco mais confiante.
 
harbor:

quando o atual é fechado, o número de ordens de compra diminuirá, ou elas estarão ausentes (depende do algoritmo), você faz esta verificação e exclui as ordens pendentes

algo assim (neste caso, ao contrário, as ordens pendentes são eliminadas se uma compra colocada anteriormente tiver fechado com lucro):

Muito obrigado. Esta noite, vou analisar o assunto.
 

Se isso acontecer - aumento o Stop Loss para o tamanho exigido. Não estabeleço um limite, mas deixo-o virtual no programa e abro uma ordem. Como resultado, apenas uma de 15 a 20 ordens abre. O que devo fazer para abrir cada ordem?

RefreshRates();


     double bid = MarketInfo(symbol,MODE_BID);
     double ask = MarketInfo(symbol,MODE_ASK);

    

     double stoplevel =  NormalizeDouble(stoplevelTemp * tickTemp,digitsTemp)+tickTemp;

     if(digitsTemp == 5 )
          stoplevel+=(700 * tickTemp);
     
     if(spreadOrdDangBr < stoplevel)                                                                           //если спред меньше стоплевела - перебиваем
         spreadOrdDangBr=stoplevel;
         
     double lotDB = calculationLot(spreadOrdDangBr,0.0025);                                                      //расчитываем лот - четверть процента свободных денег
     


         slODB=ask-spreadOrdDangBr;                                                                              
         tpODB= ask+ spreadOrdDangBr;

         orderTicketODB=OrderSend(symbol,OP_BUY,lotDB,ask,3,slODB,0,("dangBr" +spreadOrdDangBr));



e como resultado no terminal


 
Olá a todos) Como determinar o preço máximo de uma barra selecionada (por exemplo, 100ª barra)
 

Ajude, por favor! Eu quero abrir posição de compra, e se o preço subir 100
pips, meu stop loss se tornará igual a zero em relação ao stop loss anterior.

Estou fazendo isso corretamente?


if(Bid-OrderOpenPrice()>Ponto*100)

{

OrderModify(OrderTicket(),OrderOpenPrice(), 0,TakeProfit,0,);

retorno(0);

}

Obrigado!

 
Tema97:
Olá a todos) como determinar o preço máximo de uma barra selecionada ( por exemplo, 100º )
Alto[100] não vai ajudar
 

Encontrei uma função que define o preço máximo e mínimo para 100 barras e desenha linhas horizontais (ajude-me a fazer passar as primeiras 15 barras e só depois verifique se há 100 barras (como faço isso?) e outro problema com linhas - desenha apenas 1 vez - ou seja - se vamos mais 100 pontos com novos altos e baixos - as linhas não são desenhadas) ninguém sabe por favor escreva - aqui está o código

Externo interno Quant_Bars=100; // Número de barras

//--------------------------------------------------------------------

int start() // Início de funções especiais

{

int i; // número de barras

duplo Mínimo=Licitações; // Preço mínimo

Máximo=Licitações; // Preço máximo

for(i=0;i<=Quant_Bars-1;i++) // De zero (!) a

{ // ...Quant_Bars-1 (!)

se (Baixo[i]<Mínimo) // Se < conhecido

Minimum=Low[i]; // este será o Min

se (Alto[i]> Máximo) // se > conhecido

Máximo=Alto[i]; // será máximo.

}

Alerta("Para os últimos ",Quant_Bars, // Display

"Min= ",Mínimo," Máx= ",Máximo);

double linia1=ObjectCreate("highLine",OBJ_HLINE,0,0,Maximum);

double linia2=ObjectCreate("lowLine",OBJ_HLINE,0,0,Minimum);

retorno(0); // partida de saída()

}

 
Tema leu, finalmente, a documentação. Lá você pode encontrar tantas coisas interessantes... Por exemplo, iHighest retorna o índice do maior valor encontrado (compensado da barra atual) do gráfico correspondente. E iHigh retorna o valor do preço máximo da barra (especificado pelo parâmetro de deslocamento) do gráfico correspondente. Uma vez entendidas estas duas funções, você pode resolver facilmente seu problema sem recorrer a funções que nem sempre são escritas por outros.
 
Rapazes, se o indicador desenha objetos gráficos não-padrão, é possível acessá-los? O problema é que eles não são exibidos na lista de objetos (quando o botão All é pressionado) e a função ObjectsTotal() não os vê. Ao tentar acessar objetos por seu nome, GetLastError() retorna o erro 4202(função ObjectFind())
Razão: