Ошибки, баги, вопросы - страница 770

 
maryan.dirtyn:
...

п.с. тех кто отсылает пользоватся стандартными библиотеками просьба не беспокоить, я люблю знать что делает мой эксперт, а не надеятся что потом его не сплющит 

Зато стандартные библиотеки можно посмотреть/изучить и понять, какие ошибки были допущены. Очень хорошая возможность.
 

а можно мне вас сильно попросить написать тут простую детскую функцию открытия ордера с установкой тейка и стопа сразу.. я пробую сделать это уже последних 6 часов и склоняюсь к мысли что сие невозможно

я не буду пользоватся ничем стандартным, вы уж меня извините.. 

 
maryan.dirtyn:

а можно мне вас сильно попросить написать тут простую детскую функцию открытия ордера с установкой тейка и стопа сразу.. я пробую сделать это уже последних 6 часов и склоняюсь к мысли что сие невозможно

я не буду пользоватся ничем стандартным, вы уж меня извините.. 

Что Вас так пугает в стандартных библиотеках? Вот смотрите, что есть в файле Trade.mqh:

Функция для открытия позиции:

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

//---

Согласитесь, что не так уж сильно она отличается от Ваших попыток. Обратите внимание на функцию ClearStructures(). Если стопы нужно выставить после открытия позиции, то следующая функция Вам поможет в этом:

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

//---

Всё просто и всё работает. А дальше уже можно добавлять/менять/экспериментировать, как посчитаете нужным.

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

а можно мне вас сильно попросить написать тут простую детскую функцию открытия ордера с установкой тейка и стопа сразу.. я пробую сделать это уже последних 6 часов и склоняюсь к мысли что сие невозможно

я не буду пользоватся ничем стандартным, вы уж меня извините.. 

Специально для Вас:

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

Чтобы прикоснуться к неизведанному, достаточно вставить сей код в скрипт, скомпилировать, а потом встать курсором на Buy и нажать Alt+G.

Начнется путешествие по внутренностям всех библиотек. Заодно и обработку ошибок посмотрите.

 
Renat:

Специально для Вас:

Чтобы прикоснуться к неизведанному, достаточно вставить сей код в скрипт, скомпилировать, а потом встать курсором на Buy и нажать Alt+G.

Начнется путешествие по внутренностям всех библиотек. Заодно и обработку ошибок посмотрите.


"Yeah, baby!"
А вот это ещё даже озвучить можно и всё будет вообще в шоколаде. )))
 

я так понимаю другого способа кроме этого, просто не существует в природе?

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

я так понимаю другого способа кроме этого, просто не существует в природе?

Сделайте аналогичную-(ые) функцию-(ии) в главном файле и ничего подключать не нужно.
 

так вот я и делаю)).. 6-ой час.. и немогу понять где ошибка

 нежелание использовать стандартные библиотеки связано с тем, что используются флаги и глобальные переменные внутри функций, а разбирать по запчастям trade.mqh и другие не представляется разумным

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:

так вот я и делаю)).. 6-ой час.. и немогу понять где ошибка

 нежелание использовать стандартные библиотеки связано с тем, что используются флаги и глобальные переменные внутри функций, а разбирать по запчастям trade.mqh и другие не представляется разумным

На каком сервере и каком символе пробуете?

Я запустил Ваш код на MetaQuotes-Demo и сделка успешно прошла:

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

попробовал только что на фунте, та же история. никаких стопов. все делаю в тестере

Build 655 (если это поможет) 

Причина обращения: