[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 622

 
Rossi:

há alguma forma de ordenar os instrumentos nas abas na parte inferior da tela? porque 8 instrumentos em 4 prazos estão espalhados em uma bagunça....

não
 
DDFedor:

agarre a aba com o nome do gráfico e arraste-a para o lugar certo

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA grande resposta, obrigado...
 
artmedia70:
:) Agora o erro 130 apareceu. O mais confuso é que, com paradas erradas (130), ela ainda define decolagens corretas (calculadas pela ATR), mas minhas paradas não foram definidas desde o início...
Há alguma maneira de entender isto?
Um erro de 130 pode ser ou uma perda de carga errada ou um lucro de exploração errado.
 
ToLik_SRGV:


Acrescentei ordens limitadas (esqueci-as no código anterior :)) + erro no processamento #1 (antes de modificar o novo preço é comparado ao atual, se forem iguais, então nada acontece):

Parece que as ordens modificadas movidas pela rede de arrasto mais perto do mercado perdem sua herança TakeProfit... Uma vez acionados, eles penduram na tabela em posições e estupidamente consomem margem. Eles não fecham em lucro ou prejuízo e não há linha TakeProfit... Embora, eu tenha adicionado propositalmente o valor tp, calculado usando ATR, ao código para verificá-lo:

void trailingOrder(int magic, int trailing){
   int index = 0, tp=TakeProfitATR (5);
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),
                  /*OrderTakeProfit()*/tp, 0, MediumSpringGreen))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
// ..... Далее по тексту функции также добавлены изменения...

Tanto antes quanto depois de minhas mudanças, a ordem modificada não tinha uma linha de tomada antes ou depois de sua conversão para uma posição...

Qual pode ser a razão?

 
artmedia70:

Parece que as ordens modificadas deslocadas pela rede de arrasto mais perto do mercado perdem sua herança TakeProfit... Uma vez acionados, eles penduram na tabela em posições e estupidamente consomem margem. Eles não fecham em lucro ou prejuízo e não há linha TakeProfit... Embora, eu tenha adicionado propositalmente o valor tp, calculado usando ATR, ao código para verificá-lo:

Tanto antes como depois da adição de mudanças, a ordem modificada não tinha uma linha de tomada antes ou depois de sua conversão para uma posição...

Qual poderia ser a razão?

Ao modificar o preço de um pedido pendente, o stoploss e o takeprofit também devem ser modificados.
 
khorosh:
O erro 130 pode ser ou o stoploss errado ou o takeprofit errado.
Obrigado. Eu já sabia que... Não era essa a questão. Foi a rede de arrasto que me deu o erro - eu a desabilitei e está tudo bem. Eu ainda não tenho tempo para lidar com isso.
 
khorosh:
Ao modificar o preço do pedido pendente, você também deve modificar o StopLoss e o TakeProfit.

A função Take Profit da ATR não faz isso? Eu o chamo antes de modificar um pedido, obter o valor atual do take calculado por TakeProfitATR() e colá-lo na modificação do pedido... Isto está em meu exemplo acima:

int index = 0, tp=TakeProfitATR (5); // Рассчёт нового тейка по значению ATR. Ф-ция возвращает размер тейка в пунктах

....

if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),
   /*OrderTakeProfit()*/tp, 0, MediumSpringGreen))Print(">>> ERROR ", GetLastError()); // здесь вместо OrderTakeProfit() подставляю tp
Parece que encontrei um erro ao escrever isto... A função TakeProfit da ATR retorna o valor TakeProfit em pips, enquanto o preço deve ser usado.
Mas então não entendo porque é que a ordem modificada estava a perder a sua capacidade... Embora, OrderTakeProfit() deva escrever o valor de seu take point na ordem que está sendo modificada...
E então a pergunta - por que eu deveria modificá-la (tirar) toda vez que, digamos, eu só quero mover uma ordem pendente para mais perto do mercado sem mudá-la, se o mercado se afastou dela e está pronto para uma reversão ou correção... ???
 
artmedia70:

A função Take Profit da ATR não faz isso? Eu o chamo antes de modificar um pedido, obter o valor atual do take calculado por TakeProfitATR() e colá-lo na modificação do pedido... Isto está em meu exemplo acima:

....

Parece que encontrei meu erro ao escrever isto... A função TakeProfit da ATR retorna o valor TakeProfit em pips, enquanto o preço deve ser usado.
Mas então não entendo porque a ordem modificada ainda perdeu seu valor de takepoint antes dessas mudanças... Embora, OrderTakeProfit() deva escrever o valor de seu take point na ordem que está sendo modificada...
E então a pergunta - por que eu deveria modificá-la (tirar) toda vez que, digamos, eu só quero mover uma ordem pendente para mais perto do mercado sem mudá-la, se o mercado se afastou dela e está pronto para uma reversão ou correção... ???




Quando você coloca uma ordem pendente, você só precisa definir limitadores e o método arrastará tudo para o lugar certo :))

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   double takeprofit, stoploss;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing, Ask+Point*trailing-(OrderOpenPrice()-OrderStopLoss()), Ask+Point*trailing+(OrderTakeProfit()-OrderOpenPrice()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,Bid-Point*trailing+(OrderStopLoss()-OrderOpenPrice()),Bid-Point*trailing-(OrderOpenPrice()-OrderTakeProfit()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLLIMIT){
            if(OrderOpenPrice() - Bid > Point*trailing){
               if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid+Point*trailing,Bid+Point*trailing+(OrderStopLoss()-OrderOpenPrice()),Bid+Point*trailing-(OrderOpenPrice()-OrderTakeProfit()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_BUYLIMIT){
            if(Ask - OrderOpenPrice() > Point*trailing){
               if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask-Point*trailing,Ask-Point*trailing-(OrderOpenPrice()-OrderStopLoss()),Ask-Point*trailing+(OrderTakeProfit()-OrderOpenPrice()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 
ToLik_SRGV:


Ao definir as ordens pendentes, eu estabeleço limitadores uma vez e depois o próprio método arrasta tudo para o lugar certo :)))

Muito útil! Mas não o ideal. Devemos mudar dinamicamente a tomada. Por que temos que seguir o mercado? Se estabelecermos uma ordem pendente e o preço se afastar - uma correção, por exemplo... O que fazemos? Esperamos que o preço volte? Ou apagar o pedido? Não seria melhor fazer isso...

Imaginemos uma situação em que o mercado tenha baixa volatilidade, mas uma constante tendência ascendente. O preço se afastou lentamente da ordem SELLSTOP pendente para cima. Uma posição de COMPRA aberta já foi trabalhada e fechada com lucro. Esperamos que a volatilidade do mercado aumente e, assim que ela ultrapassa algum limite, movemos uma ordem limite para o preço. Assim, pegamos a correção que começou e o Limitador funciona não como uma posição de fechamento, mas como uma fonte adicional de renda. Se não a tivéssemos movido, a correção poderia tê-la alcançado, tocado e terminado. Neste caso, teríamos uma posição de Lota Sell em uma tendência de alta.

Tal excursão em um safári de tendências...

Se tivermos TP dinâmicos, então, movendo uma ordem pendente para o mercado e levando em conta a forte volatilidade (aqui ela será maior do que para a volatilidade fraca), é mais provável que tenhamos mais lucro com uma correção do que no caso de TP estáticos. De qualquer forma, se não fecharmos a tomada, a rede de arrasto fará seu trabalho e perderemos apenas o lucro perdido...

Ugh... Faz muito tempo que eu não clicava tanto no teclado.

Portanto, a sugestão segue por si só. Para fazer de passagem parâmetros de função também TimeFrame. E com base nisso, calcular o take a partir dos valores ATR.

Eu experimentei por algum tempo e minhas investigações para a M5 TF levaram à conclusão de que o lucro ótimo de acordo com a ATR é calculado com ATR*45000, e eu o fiz para meus cálculos. A esses valores, o mercado quase sempre "captura" o tempo necessário:

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR (int tf)
  {
   double   atr   =iATR(NULL,tf,14,0);
   double   mltp  =15000;
   if (tf==1) mltp=15000;
   if (tf==5) mltp=45000;
   double   tp    =MathRound(atr*mltp);
   return  (tp);
  }

É claro que a função não está terminada, mas é o suficiente para eu testar (estou testando M5 por enquanto)... A propósito, com valor de entrada = 1, dá uma boa distância para a definição de pedidos pendentes.

Seria bom vê-lo em sua função... :)

Obrigado de qualquer forma - é bastante satisfatório considerando minhas modificações apenas para obter o acima...
ZS... seria bom adicionar cores para os ícones de modificação. (na verdade eu já os adicionei)...

 

Aqui está uma pergunta: como a Colômbia Britânica lida com um grande número de negócios? Meu Conselheiro Especialista abre posições a cada 29 minutos (apenas uma em cada cinco estratégias). Então, quando o patrimônio aumenta em 5%, todos eles são fechados juntos. O principal é que o saldo aumenta cinco por cento a cada três a cinco dias.

Pergunto-me se a Colômbia Britânica tem alguma reivindicação para este tipo de comércio.