[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 2

 
tara:
Que tal dois?
Em seguida, os nomes são alfabéticos.
 
     // Проверяем все открытые ордера---------------------------------------------------------------------------

    for(n=0,i=0;i<OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC+1 || OrderMagicNumber()>MAGIC+3) continue;
      no=OrderMagicNumber()-MAGIC;
      
      if(no==1)
      {
         n++;
         if(OrderType()==OP_SELL) { if(OrderOpenTime()>=ltts && BSo1==OP_SELL) s1=true; 
         if(MathAbs((OrderOpenPrice()-NormalizeDouble(Bid,Digits))/Point)<Add){OS1=1;} // Запрет на открытие селл

            } else
         if(OrderType()==OP_BUY) { if(OrderOpenTime()>=lttb && BSo==OP_BUY) b1=true;
         if(MathAbs(OrderOpenPrice()-NormalizeDouble(Ask,Digits))/Point<Add){OB1=1;} // Запрет на открытие бай
         }     
      }
   }
Boa tarde.
A tarefa é abrir uma ordem a uma certa distância "Adicionar" de uma ordem já aberta.
As ordens de compra e venda separadas são controladas.
Eu escrevi este código. Parece estar funcionando, mas às vezes o preço cobre uma distância maior do que o "Add", mas o pedido não é aberto.
Já experimentei impressões, mas a condição "adicionar" não funciona corretamente e não sei o que está errado.
Talvez alguém me diga o que devo fazer?
 

Caros senhores, fiquei intrigado com a solução de um problema relacionado com as solicitações.

Situação: Expert Advisor abre ordens do mercado com paradas duras e aquisições em pips, trabalha em um bar fechado, M15. Um sinal para abrir o pedido é recebido e o Expert Advisor tenta abrir o pedido várias vezes, mas ele falha. Na barra seguinte o sinal se repete e o Expert Advisor abre o negócio, mas a tarifa deixou o ponto onde o primeiro sinal foi dado. Acontece que a parada e a tomada serão definidas a partir do ritmo em que o negócio foi aberto, e não a partir do ritmo em que o primeiro sinal for aberto. Escrevi uma construção tal que, ao estabelecer uma parada e uma tomada, o Conselheiro Especialista tomaria o preço ao qual o primeiro sinal era recebido.

  if(sg==1 && TimeCurrent()-buy_time>=1800) {buy_price=Ask;buy_time=TimeCurrent();}//
  if(sg==-1 && TimeCurrent()-sell_time>=1800) {sell_price=Bid;sell_time=TimeCurrent();}//
где,
sg==1 сигнал на покупку
sg==-1 сигнал на продажу
buy_time - переменная в которую запоминаем время поступления сигнала на покупку
sell_time - переменная в которую запоминаем время поступления сигнала на продажу

при выставлении ордера стоп и тейк прибавляем/вычитаем не от текущей цены а от buy_price и sell_price

Quero explicar por que quero usar o primeiro sinal: as paradas e tomadas foram selecionadas no testador e são mais ou menos ótimas, se definirmos paradas/paradas a partir do segundo sinal, elas não serão ótimas porque a taxa real de abertura difere da taxa no primeiro sinal.

 
evillive:

O total de encomendas é 1, ou seja, nunca chegamos à mais antiga. Em segundo lugar, ela arrasta ordens do mais novo para o mais velho, e os mais velhos podem ser fechados usando o stop ou take antes que a traineira chegue a ela. Em geral, o que não funciona, você tem registros de erros?


O TS não funciona, várias vezes notei que "como projetado" ele não fecha as posições de modo algum.

E quanto ao fechamento de pedidos, poderia escrever mais detalhes, pois a EA é multi-moeda, mas com um limite de 1 negociação em uma moeda de cada vez.

 
Stells:
Boa tarde.
A tarefa é abrir uma ordem a uma certa distância "Adicionar" de uma ordem já aberta.
As ordens de compra e venda separadas são controladas.
Eu escrevi este código. Parece estar funcionando, mas às vezes o preço cobre uma distância maior do que o "Add", mas o pedido não é aberto.
Já experimentei impressões, mas a condição "adicionar" não funciona corretamente e não sei o que está errado.
Talvez alguém me diga o que devo fazer?


As características de Igor Kim, de forma simples e conveniente.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |7
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Sancho77:

Caros senhores, fiquei intrigado com a solução de um problema relacionado com as solicitações.

Situação: Expert Advisor abre ordens do mercado com paradas duras e aquisições em pips, trabalha em um bar fechado, M15. Um sinal para abrir o pedido é recebido e o Expert Advisor tenta abrir o pedido várias vezes, mas ele falha. Na barra seguinte o sinal se repete e o Expert Advisor abre o negócio, mas a tarifa deixou o ponto onde o primeiro sinal foi dado. Acontece que a parada e a tomada serão definidas a partir do ritmo em que o negócio foi aberto, e não a partir do ritmo em que o primeiro sinal for aberto. Escrevi uma construção tal que, ao estabelecer uma parada e uma tomada, o Conselheiro Especialista tomaria o preço ao qual o primeiro sinal era recebido.

Quero explicar por que quero usar o primeiro sinal: as paradas e tomadas de tamanho foram selecionadas no testador e são mais ou menos ótimas, se você definir paradas/paradas a partir do segundo sinal, vai descobrir que elas não são ótimas, porque a taxa de abertura real do negócio é diferente da taxa no primeiro sinal.

Acontece que a otimização é determinada apenas pelos níveis de tp e sl, enquanto o preço do negócio pode ser qualquer? Isso não parece lógico.
 
alsu:
Acontece que a otimização é determinada apenas pelos níveis de tp e sl, enquanto o preço do negócio pode ser qualquer? Não parece lógico.

A otimização não é determinada apenas por uma parada e tomada, é determinada principalmente pelos parâmetros do sinal para abrir um negócio, eu não dei estes sinais para não sobrecarregar minha pergunta, os parâmetros do sinal na verdade não se relacionam com o problema em questão. O preço do negócio pode ser qualquer um, se o sinal para abrir o negócio for salvo.

Eu ficaria grato se você pudesse dar sua opinião sobre a essência da minha pergunta, ou seja, se o código para o cálculo dos níveis a partir dos quais uma parada e uma tomada será calculada está escrito corretamente?

 
Sancho77:

Não tenho o código à mão, mas fiz algo semelhante para mim mesmo, mas não assim: lembrei-me da hora da barra em que havia um sinal, e quando um pedido foi feito usando este sinal, redefini o tempo do sinal para zero, e assim por diante:

datetime buy_time,sell_time;
int init(){
   buy_time = 0;
   sell_time = 0;
}
int start(){
   if(buy_time==0 && Open[1]>Close[2]) buy_time = TimeCurrent();
   .......
   if(buy_time!=0){
      OrderSend(.........);
      buy_time = 0;
   }
return(0);
}
Bem, se a pergunta é sobre lutar apenas contra as solicitações, então olhe na linha de Igor Kim, quase todas as funções para fazer pedidos têm um parâmetro para quantas vezes tentar fazer o pedido
 
Sancho77:

A otimização não é determinada apenas por uma parada e tomada, é determinada principalmente pelos parâmetros do sinal para abrir um negócio, eu não dei estes sinais para não sobrecarregar minha pergunta, os parâmetros do sinal na verdade não se relacionam com o problema em questão. O preço do negócio pode ser qualquer um, se o sinal para abrir o negócio for salvo.

Serei grato se você disser sobre a essência da minha pergunta, ou seja, se o código para o cálculo dos níveis a partir dos quais o stop and take será calculado corretamente está escrito?

Sim, está escrito corretamente, mas imagine a situação: o preço "real" do negócio ficou, por exemplo, acima do TP memorizado - o que você vai fazer então? (e esta situação é bem real - as solicitações são apenas freqüentes no mercado rápido, quando o preço sobe)
 
alsu:
A escrita está correta, mas imagine a situação: o preço "real" do negócio acabou sendo, por exemplo, acima do TP memorizado - o que você vai fazer então? (E esta situação é bem real - as solicitações são apenas frequentes no mercado rápido, quando o preço sobe)

Obrigado por sua opinião.

Se o preço acabar sendo maior que o TP memorizado, então o comércio será aberto com o nível mínimo de takeaway, tal processamento é inerente ao EA.

PS A propósito, terei que tentar colocar uma proibição de abertura de posição se o novo preço se afastasse do preço memorizado a mais de uma certa distância, obrigado pelo pensamento, gostaria de poder verificá-lo no testador, apenas no comércio.

Razão: