Erros, bugs, perguntas - página 770

 
maryan.dirtyn:
...

p.s. aqueles que me dizem para usar bibliotecas padrão não se incomodem, gosto de saber o que o meu perito está a fazer e não espero que mais tarde não se afunde

Pelo menos as bibliotecas padrão podem ser vistas/estudadas e é possível compreender os erros que foram cometidos. Uma oportunidade muito boa.
 

Tenho tentado fazer isto nas últimas 6 horas e estou inclinado a pensar que é impossível

Não usarei nenhum dos normais, se me dão licença...

 
maryan.dirtyn:

Tenho tentado fazer isto nas últimas 6 horas e estou inclinado a pensar que é impossível

Não usarei nada padrão, se me dão licença...

O que é que se passa com as bibliotecas padrão que o assusta tanto? Veja o que está no ficheiro Trade.mqh:

Função para abrir uma posição:

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

//---

Deve concordar que não é assim tão diferente do que está a tentar fazer. Preste atenção à função ClearStructures(). Se as paragens precisarem de ser definidas depois de a posição ter sido aberta, então a função seguinte ajudá-lo-á com isto:

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

//---

É simples e tudo funciona. E depois pode adicionar/alterar/experimentar como achar conveniente.

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

Tenho tentado fazer isto nas últimas 6 horas e estou inclinado a pensar que é impossível

Não usarei nenhum dos padrões, se me dão licença...

Especialmente para si:

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

Para tocar no desconhecido, basta inserir este código no guião, compilar, e depois colocar o cursor em Comprar e premir Alt + G.

Começará a viajar através das entranhas de todas as bibliotecas. Ao mesmo tempo, olhar para a manipulação de erros.

 
Renat:

Especialmente para si:

Para tocar no desconhecido, basta inserir este código no guião, compilá-lo, depois colocar o cursor sobre Comprar e premir Alt+G.

Começará a viajar através dos interiores de todas as bibliotecas. Ao mesmo tempo, olhar para a manipulação de erros.


"Yeah, baby!"
Até se pode exprimir o acima exposto e tudo ficará bem. )))
 

Presumo que não haja outra forma de o fazer, pois não?

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

Presumo que não haja outra forma de o fazer, pois não?

Faça funções semelhantes no ficheiro principal e não precisa de ligar nada.
 

É isso que estou a fazer))... 6ª hora... e não consigo descobrir onde está o erro

a relutância em utilizar bibliotecas padrão deve-se ao facto de as bandeiras e variáveis globais serem utilizadas dentro das funções, e não parece razoável desmontar o trade.mqh e outras partes

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:

É isso que estou a fazer))... 6ª hora... e não consigo descobrir onde está o erro

Não quero usar bibliotecas padrão porque as bandeiras e variáveis globais são usadas dentro de funções, e não me parece razoável decompor o trade.mqh e outras funções por partes

Em que servidor e que símbolo está a tentar?

Corri o vosso código em MetaQuotes-Demo e a transacção foi bem sucedida:

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

Login: 1219233

EURUSD

Acabei de o experimentar no canil, a mesma história. sem paragens. faço tudo no testador

Construir 655 (se ajudar)

Razão: