Errori, bug, domande - pagina 770

 
maryan.dirtyn:
...

p.s. quelli che mi dicono di usare librerie standard per favore non si preoccupino, mi piace sapere cosa sta facendo il mio esperto e non sperare che non si appiattisca dopo

Ma le librerie standard possono essere viste/studiate ed è possibile capire quali errori sono stati fatti. Un'ottima opportunità.
 

Ho provato a farlo nelle ultime 6 ore e sono propenso a pensare che sia impossibile

Non userò nulla di standard, se volete scusarmi...

 
maryan.dirtyn:

Ho provato a farlo nelle ultime 6 ore e sono propenso a pensare che sia impossibile

Non userò nulla di standard, se volete scusarmi...

Cosa c'è nelle librerie standard che vi spaventa così tanto? Guarda cosa c'è nel file Trade.mqh:

Funzione per aprire una posizione:

//+------------------------------------------------------------------+
//| Open position.                                                   |
//+------------------------------------------------------------------+
bool CTrade::PositionOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,
                          const double price,const double sl,const double tp,const string comment)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- checking
   if(order_type!=ORDER_TYPE_BUY && order_type!=ORDER_TYPE_SELL)
     {
      m_result.retcode=TRADE_RETCODE_INVALID;
      m_result.comment="Invalid order type";
      return(false);
     }
//--- setting request
   m_request.action      =TRADE_ACTION_DEAL;
   m_request.symbol      =symbol;
   m_request.magic       =m_magic;
   m_request.volume      =volume;
   m_request.type        =order_type;
   m_request.price       =price;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.deviation   =m_deviation;
   m_request.type_filling=m_type_filling;
   m_request.comment     =comment;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

//---

Dovreste essere d'accordo che non è molto diverso da quello che state cercando di fare. Fate attenzione alla funzione ClearStructures(). Se i fermi devono essere impostati dopo che la posizione è stata aperta, allora la seguente funzione vi aiuterà con questo:

//+------------------------------------------------------------------+
//| Modify specified opened position.                                |
//+------------------------------------------------------------------+
bool CTrade::PositionModify(const string symbol,const double sl,const double tp)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action=TRADE_ACTION_SLTP;
   m_request.symbol=symbol;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

//---

È semplice e tutto funziona. E poi puoi aggiungere/modificare/sperimentare come meglio credi.

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 
maryan.dirtyn:

Ho provato a farlo nelle ultime 6 ore e sono propenso a pensare che sia impossibile

Non userò nessuno di quelli standard, se volete scusarmi...

Specialmente per te:

#include <trade\trade.mqh>
void OnStart()
  {
   CTrade trade;
   trade.Buy(1.0,"EURUSD",SymbolInfoDouble("EURUSD",SYMBOL_ASK),1.20000,1.50000,"Yeah, baby!");
  }

Per toccare l'ignoto, basta inserire questo codice nello script, compilare e poi mettere il cursore su Buy e premere Alt + G.

Inizierete a viaggiare attraverso gli interni di tutte le librerie. Allo stesso tempo guardate la gestione degli errori.

 
Renat:

Specialmente per te:

Per toccare l'ignoto, basta inserire questo codice nello script, compilarlo, poi mettere il cursore su Buy e premere Alt+G.

Comincerete a viaggiare nelle viscere di tutte le biblioteche. Allo stesso tempo guardate la gestione degli errori.


"Yeah, baby!"
Si può anche dare voce a quanto detto sopra e tutto andrà bene. )))
 

Immagino che non ci sia un altro modo per farlo, vero?

#include <trade\trade.mqh>
 
maryan.dirtyn:

Immagino che non ci sia un altro modo per farlo, vero?

Fate una o più funzioni simili nel file principale e non avrete bisogno di inserire nulla.
 

È quello che sto facendo))... 6a ora... e non riesco a capire dove sia l'errore

la riluttanza a usare le librerie standard è dovuta al fatto che i flag e le variabili globali sono usati all'interno delle funzioni, e non sembra ragionevole smontare trade.mqh e altre parti

void OnTick(){ if(PositionsTotal()<1){OPEN();}}

bool OPEN(){
             MqlTradeRequest request; ZeroMemory(request);
             MqlTradeResult  result;  ZeroMemory(result);
             

             request.symbol       = _Symbol;
             request.action       = TRADE_ACTION_DEAL;
             request.type_filling = ORDER_FILLING_FOK;
             request.deviation    = 100;
             request.volume       = NormalizeDouble(2,2);
             request.type         = ORDER_TYPE_BUY;
             request.price        = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
             request.tp           = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK) + 500*_Point,_Digits);
             request.sl           = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK) - 500*_Point,_Digits);

             OrderSend(request,result);     
                        
             if(result.retcode==10009 || result.retcode==10008)  Print("Succsesful open");
             else                                               Print("Error open: ",DoubleToString(GetLastError(),0),"  response code: ",result.retcode);
    
   return(true);}
 
maryan.dirtyn:

È quello che sto facendo))... 6a ora... e non riesco a capire dove sia l'errore

Non voglio usare le librerie standard perché uso flag e variabili globali all'interno delle funzioni, e non sembra ragionevole separare trade.mqh e altre funzioni

Su quale server e quale simbolo stai provando?

Ho eseguito il tuo codice su MetaQuotes-Demo e la transazione ha avuto successo:

2012.07.11 15:08:36     Trades  '1026582': deal #109507221 buy 2.00 EURUSD at 1.22625 done (based on order #115678901)
2012.07.11 15:08:36     Trades  '1026582': order #115678901 buy 2.00 / 2.00 EURUSD at 1.22625 done
2012.07.11 15:08:36     Trades  '1026582': instant buy 2.00 EURUSD at 1.22627 sl: 1.22127 tp: 1.23127 (deviation: 100)
 

MetaQuotes-Demo

Accesso: 1219233

EURUSD

Ho appena provato sulla sterlina, stessa storia. nessun arresto. faccio tutto nel tester

Costruire 655 (se aiuta)