Automated Trading Championship 2008: Регистрация завершена! - страница 6

 
Prival >>:

Спасибо я уже модифицировал и cделал по другому, в вашей рекомендации GetLastError()==134 лишнее, т.к. появиться после использования OrderSend, а нужно делать до


Наверное Вы точно также считали,что сами все знаете лучше, когда закачивали непроверенного эксперта в последнюю минуту окончания регистрации.


Лучше слушать рекомендации, внимательно читать и принимать информацию:

double AccountFreeMarginCheck( string symbol, int cmd, double volume)

Возвращает размер свободных средств, которые останутся после открытия указанной позиции по текущей цене на текущем счете. Если свободных средств не хватает, то будет сгенерирована ошибка 134 (ERR_NOT_ENOUGH_MONEY).

Фактически перед исполнением заявки мы как раз проверяем аналог функции AccountFreeMarginCheck с выдачей кода ошибки 134. Если хотите уберечься от этой ошибки, то проверьтесь через эту функцию.

 
int RetriesVol = 8;
int triesvol;
-------------------------------------------------------------------------------------------------

triesvol = RetriesVol;        

-------------------------------------------------------------------------------------------------
                        Vol=NormalizeDouble( ... ,1);			// вычислили нужный объём

                        while(triesvol > 0)
                          {
                            if(AccountFreeMarginCheck(Symbol(),OP_BUY,Vol)<=0)	// если то, что получили, нельзя вывести в торги
                              {
                                Vol=NormalizeDouble((Vol*0.8),1);	// начинаем уменьшать объём средств
                                Print("Volume was decreased. ");
                              }
                            else
                              break;    

                            triesvol--; 
                            if(triesvol==0)		// если же всё таки никак нельзя вывести объём после 8 уменьшений, отказываемся от сделки
                              {
                                Print("Cannot send buy order. Not enough money. ");
                                return;
                              }
                          }
                        triesvol=RetriesVol;

                        ticket=OrderSend(Symbol(),
                                         OP_BUY,
                                         Vol,
                                         Ask,
                                         Slippage,
                                         SL_Buy,
                                         TP_Buy,
                                         "Open buy order",
                                         MAGIC,
                                         0,
                                         SpringGreen);

Например.

 
Parabellum >>:

Например.


Таки да Prival прав. Зачем ждать ошибку, если можно её предотвратить? Зачем лечить последствия? Лечим причину! :)

У меня так и сделано.