Скачать MetaTrader 5

Requote message window! - окно реквота! - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ahmad Mehdiyev
478
Ahmad Mehdiyev 2012.08.04 07:26  

Вот что получилось. Проверил с помощью ошибки 132 (Market is closed). Пожалуйста подправьте если что не так.

Сразу отмечу две проблемки:

1) скрипт после 5-ти принятий цены завершает работу, несмотря на j < 10;

2) новые цены Bid и Ask не нормализуются и выдаются в MessageBox с 3-мя лишними нулями.

#include <stdlib.mqh>
#include <WinUser32.mqh>

double Lots  = 1;
//+------------------------------------------------------------------+
//| script                                                           |
//+------------------------------------------------------------------+
int start()
  {

for (int j = 0; j < 10; j++) {
   RefreshRates();         
   int ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"scr BUY",0,0,CLR_NONE);
   double b = NormalizeDouble(Bid,5);
   double a = NormalizeDouble(Ask,5);
   if(ticket<1) {
      int error=GetLastError();
      Print("Error = ",ErrorDescription(error));
      if (error==138) {
         int ret=MessageBox("Requote! New price:  "+b+" -- "+a+".  Accept?",
              "Requote",MB_OKCANCEL|MB_TOPMOST|MB_ICONEXCLAMATION);
         if (ret==IDCANCEL) return;
         j++;
         continue;
      }
      return;
   }
}
//----
   OrderPrint();
   return(0);
  }
//+------------------------------------------------------------------+
ZZZEROXXX
768
ZZZEROXXX 2012.08.04 08:10  
У меня другой вопрос, как после реквота отказаться\согласится с новой ценой программно? Где и какими функциями мне эту новую предлагаемую цену вычленить?
Ahmad Mehdiyev
478
Ahmad Mehdiyev 2012.08.04 09:20  
Этот вопрос неднократо поднимался на форуме. Насколько я помню ничего лучше чем RefreshRates(), а затем снова использовать Bid или Ask предложено не было. Так что RefreshRates() и новая попытка торговой операции с вашим критерием (не выше Х, не ниже Y, и т.п) это все что вам посоветуют.
Комбинатор
16030
Комбинатор 2012.08.04 09:21  
ZZZEROXXX:
У меня другой вопрос, как после реквота отказаться\согласится с новой ценой программно? Где и какими функциями мне эту новую предлагаемую цену вычленить?
Сделать RefreshRates, и если цены устраивают, отправить новый приказ.
Евгений
361
Евгений 2012.08.04 10:09  
pro_:

Вот что получилось. Проверил с помощью ошибки 132 (Market is closed). Пожалуйста подправьте если что не так.

Сразу отмечу две проблемки:

1)...

2) новые цены Bid и Ask не нормализуются и выдаются в MessageBox с 3-мя лишними нулями.

Замените:

double b = NormalizeDouble(Bid,5);
double a = NormalizeDouble(Ask,5);

На:

  string b = DoubleToStr(Bid,5);
  string a = DoubleToStr(Ask,5);
ZZZEROXXX
768
ZZZEROXXX 2012.08.04 10:39  
pro_ и TheXpert cпасибо!
Ahmad Mehdiyev
478
Ahmad Mehdiyev 2012.08.06 08:06  
Scriptong и Roll ! cпасибо! проверил в бою.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий