Errori, bug, domande - pagina 873

 
mario065:

Ciao Reshetov,

Per voi è "Che diavolo?", per me è la condizione in cui devo fare una chiamata alla funzione di modifica.

Se avessi guardato il codice, non l'avresti scritto.

Il codice lo fa:

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

A cosa serve se è lì? Per quale posizione calcola questa merda? Provate a usare Print() o il debugger per vedere quali valori delle variabili SL, TP e Open ci sono prima di if() e quali valori ha la posizione aperta nel log.
 

Grazie Reshetov,

Fatto:

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

La funzione di modifica stessa:

//+------------------------------------------------------------------+
//| 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);
  }

Ok, ora non si tratta di trovare posizioni.

Eliminato: ERR_TRADE_SEND_FAILED - 4756

Ora è 4753 - Posizione non trovata.

A volte funziona, ma c'è un tale bug che non ha trovato la posizione.

 
mario065:

Grazie Reshetov,

Fatto:

La funzione di modifica stessa:

Ok, ora non si tratta di trovare posizioni.

Eliminato: ERR_TRADE_SEND_FAILED - 4756

Ora 4753- Oggetto non trovato.

A volte funziona, ma c'è un tale bug che non ha trovato la posizione.

È meglio usare classi commerciali già pronte. Vedere Come usare le classi commerciali della libreria standard quando si scrive un EA

Per esempio, modificare la posizione di un simbolo:

//--- Класс 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);
  }
...
}
Viene fuori molto breve e chiaro.
 

Ce l'ho.

Yedelkin ha aiutato, ecco il codice.

Grazie :)

File:
 

togliere il mio IP (attualmente ne ho uno sul mio computer di casa:

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

).

Ho anche perso l'autorizzazione nel cloud e nei servizi di segnale, e a proposito, un account reale sta usando (usato, perché ora non c'è autorizzazione) i segnali.

Funziona fino a 10 terminali + browser. Non ho scaricato il sito, non l'ho rotto, ecc. - Non ho fatto nulla di contrario alle regole del forum.

 
notused:

togliere il mio IP (attualmente ne ho uno sul mio computer di casa:

).

Ho anche perso l'autorizzazione nel cloud e nei servizi di segnale, e tra l'altro, un account reale sta usando (usato, perché ora non c'è autorizzazione) i segnali.

Funziona fino a 10 terminali + browser. Non ho scaricato il sito, non l'ho rotto, ecc. - Non ho fatto nulla di incoerente con le regole di questo forum.

Stesso problema, con circa 14-00 Kiev, il moderatore ha detto che non sono nel bando, allora qual è la ragione?

 
notused:

togliere il mio IP (attualmente ne ho uno sul mio computer di casa:

).

Ho anche perso l'autorizzazione nel cloud e nei servizi di segnale, e tra l'altro, un account reale sta usando (usato, perché ora non c'è autorizzazione) i segnali.

Funziona fino a 10 terminali + browser. Non ho scaricato il sito, non l'ho rotto, ecc. - Non ho fatto nulla di contrario alle regole del forum.

Strano? Dopo tutto, se sono stato bannato, e anche dall'IP, allora immagino che non posso nemmeno parlare sul forum?
 
Reshetov:
Strano? Dopo tutto, se sei in un divieto, e anche su IP, sembrerebbe, e il forum per comunicare troppo non può?

Il moderatore ha detto che non nel divieto perché vado sotto il mio nickname, e IP cambiato tramite auto nascondere ip, ma è solo una maschera, terminali ancora eseguire sotto il nativo e i segnali non vengono trasmessi!

Gli amministratori rispondono!

 
remjte:

Il moderatore ha detto che non nel divieto perché vado sotto il mio nickname, e IP cambiato tramite auto nascondere ip, ma è solo una maschera, terminali ancora eseguire sotto il nativo e i segnali non vengono trasmessi!

Gli amministratori rispondono!

Meglio andare da servicedesk. Anche se, probabilmente non può, se ha un profilo bloccato?
 
Reshetov:Reshetov:
Migliore contatto Service Desk

Mi sto collegando da un altro IP. Ma l'account non è vietato - è l'IP che è vietato. Ho scritto al service-desk, aspetterò cosa diranno domani.