Erros, bugs, perguntas - página 873

 
mario065:

Olá Reshetov,

Para si é "Mas que raio?", para mim é a condição quando tenho de fazer uma chamada para a função de modificação.

Se tivesse olhado para o código, não o teria escrito.

O código faz:

  double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),4);
  double SL   = NormalizeDouble(PositionGetDouble(POSITION_SL),4);
  double TP   = NormalizeDouble(PositionGetDouble(POSITION_TP),4);

De que serve se estiver lá? Para que posição é que calcula esta merda? Tente usar Print() ou debugger para ver que valores das variáveis SL, TP e Open existem antes de if() e que valores a posição aberta tem no log.
 

Obrigado Reshetov,

Feito:

  double buy_trail = 0;
  double sel_trail = 0;
  double SL,TP,Open;
  if(PositionSelect(Symbol())){
    if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
      {
      Open = PositionGetDouble(POSITION_PRICE_OPEN);
      SL   = PositionGetDouble(POSITION_SL);
      TP   = PositionGetDouble(POSITION_TP);
      Bid  = SymbolInfoDouble(Symbol(),SYMBOL_BID);
      buy_trail = NormalizeDouble(Bid - Open,Digits());
      if(buy_trail > MStop)
       {
        if(NormalizeDouble((Bid - MStop),Digits()) >= Open && Open > SL)
          {
           ModifyPosition(Symbol(),Open,TP);
          }
          if(NormalizeDouble((Bid - MStop),Digits()) > SL && Open <= SL)
           {
            ModifyPosition(Symbol(),NormalizeDouble((SL + 0.001),Digits()),TP);
           }
        }
      }
    if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
      {
      Open = PositionGetDouble(POSITION_PRICE_OPEN);
      SL   = PositionGetDouble(POSITION_SL);
      TP   = PositionGetDouble(POSITION_TP);
      Ask  = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
      sel_trail = NormalizeDouble(Open - Ask,Digits());
      if(sel_trail > MStop)
       { 
        if(NormalizeDouble((Ask + MStop),Digits()) <= Open && Open < SL)
          {
           ModifyPosition(Symbol(),Open,TP);
          }
          if(NormalizeDouble((Ask + MStop),Digits()) < SL && Open >= SL)
           {
            ModifyPosition(Symbol(),NormalizeDouble((SL - 0.001),Digits()),TP);
           }
        }
      }
     }

A própria função de modificação:

//+------------------------------------------------------------------+
//| Modify position.                                                 |
//+------------------------------------------------------------------+
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){
//---- обявяване на структурата и резултата на търговското искане
   MqlTradeRequest request={0};
   MqlTradeResult result={0};
//---- структурна инициализация на  търговското искане MqlTradeRequest за модифициране на  позиция
   request.action       = TRADE_ACTION_SLTP;
   request.symbol       = symbol;
   request.sl           = StopLoss;
   request.tp           = Takeprofit;
   string word          = "";
   StringConcatenate(word,
                     "<<< ============ Modifyposition():   Модифицираме позицията  ",
                     symbol," ============ >>>");
   Print(word);
//---- модифицираме позицията и  проверяваме резултата от търговското искане
   if(!OrderSend(request,result) || result.deal==0)
     {
      Print("Modify error =", GetLastError());
      return(false);
     }
   return(true);
  }

Muito bem, agora não está a encontrar posições.

Livrou-se de : ERR_TRADE_SEND_FAILED - 4756

Agora é 4753 - Posição não encontrada.

Por vezes funciona, mas há um tal insecto que não encontrou a posição.

 
mario065:

Obrigado Reshetov,

Feito:

A própria função de modificação:

Muito bem, agora não está a encontrar posições.

Livrou-se de : ERR_TRADE_SEND_FAILED - 4756

Hora 4753- Item não encontrado.

Por vezes funciona, mas há um tal insecto que não encontrou a posição.

É melhor usar classes de comércio prontas. Ver Como Utilizar as Classes de Comércio da Biblioteca Standard Ao Escrever uma EA

Por exemplo, modificar a posição de um símbolo:

//--- Класс CTrade
#include <Trade\Trade.mqh>

//--- Объект класса CTrade
CTrade mytrade;



void OnTick() {
...
  if (myposition.Select(_Symbol))
  {
    int newStoploss = 250;
    int newTakeprofit = 500;
    double SL = mysymbol.Ask() – newStoploss*_Point;    
    double TP = mysymbol.Ask() + newTakeprofit*_Point;  
    // модифицируем открытую позицию по этому символу
    mytrade.PositionModify(_Symbol,SL,TP);
  }
...
}
Sai muito curto e claro.
 

Já o tenho.

Yedelkin ajudou. Aqui está o código.

Obrigado :)

Arquivos anexados:
 

desbloquear o meu IP (estou actualmente a receber um no meu computador de casa:

403 - запрещено. Доступ запрещен.
Предоставленные учетные данные не дают права на просмотр этого каталога или страницы.

).

Também perdi a autorização na nuvem e nos serviços de sinais, e, a propósito, uma conta real está a utilizar (antigamente, porque agora não há autorização) os sinais.

Funciona com até 10 terminais + browser. Não descarreguei o site, não o quebrei, etc. - Eu não fiz nada contrário às regras do fórum.

 
notused:

desbanir o meu IP (estou actualmente a receber um no meu computador de casa:

).

Também perdi a autorização na nuvem e nos serviços de sinais, e, a propósito, uma conta real está a utilizar (antigamente, porque agora não há autorização) os sinais.

Funciona com até 10 terminais + browser. Não descarreguei o site, não o quebrei, etc. - Não tenho feito nada incompatível com as regras deste fórum.

O mesmo problema, com cerca de 14-00 Kiev, o moderador disse que eu não estou na proibição, então qual é a razão?

 
notused:

desbloquear o meu IP (estou actualmente a receber um no meu computador de casa:

).

Também perdi a autorização na nuvem e nos serviços de sinais, e, a propósito, uma conta real está a utilizar (antigamente, porque agora não há autorização) os sinais.

Funciona com até 10 terminais + browser. Não descarreguei o site, não o quebrei, etc. - Eu não fiz nada contrário às regras do fórum.

Estranho? Afinal de contas, se estou proibido, e mesmo por IP, então acho que também não posso falar no fórum?
 
Reshetov:
Estranho? Afinal, se na proibição, e mesmo por IP, então também seria impossível comunicar no fórum?

O moderador disse que não na proibição porque vou sob o meu apelido, e o IP mudou via auto hide ip, mas é apenas uma máscara, os terminais ainda funcionam sob o nativo e os sinais não são transmitidos!

Os Admins respondem!

 
remjte:

O moderador disse que não na proibição porque vou sob o meu apelido, e o IP mudou via auto hide ip, mas é apenas uma máscara, os terminais ainda funcionam sob o nativo e os sinais não são transmitidos!

Os Admins respondem!

É melhor ir ao Servicedesk. Embora, provavelmente não possa, se tiver um perfil bloqueado?
 
Reshetov:Reshetov:
Melhor balcão de serviço de contacto

Estou a entrar a partir de um IP diferente. Mas a conta não é banida - é o PI que é proibido. Escrevi para o balcão de atendimento, vou esperar pelo que eles vão dizer amanhã.