не могу правильно подсчитать объемы всех лотов

 

Подскажите пожалуйста . как правильно подсчитать объем последнего ордеров чтоб советник не ошибся в расчетах. вот я например выбираю последний ордер беру его лот ,добавляю число и открываю новый ордер. беда в том советник постоянно выполняет не верные расчеты и у меня следюший лот открываеться с неправильным объемым

вот мой ко подсчета и открывания лота:


int TOTAL=OrdersTotal();//

int df=TOTAL-1;

if(OrderSelect(df,SELECT_BY_POS,MODE_TRADES)==true )

{

double lotsss = OrderLots();

lotsss=lotsss+0.01;//////////вот тут не правильно считаеться


int boyy = (int)(lotsss/lotstep); // округлили до целого числа шагов изменения лота

lotsss = (double)boyy * lotstep;  // теперь имеем правильный объем, кратный шагу изменения лота


RefreshRates();

int boy=OrderSend(Symbol(), OP_BUY, lotsss, Ask, 3, 0,0);

 
nazim25:

Подскажите пожалуйста . как правильно подсчитать объем последнего ордеров чтоб советник не ошибся в расчетах. вот я например выбираю последний ордер беру его лот ,добавляю число и открываю новый ордер. беда в том советник постоянно выполняет не верные расчеты и у меня следюший лот открываеться с неправильным объемым

вот мой ко подсчета и открывания лота:


Попробуйте последний ордер с помощью этой функции получить.

//+------------------------------------------------------------------+
// Получим последний по времени открытый ордер
//+------------------------------------------------------------------+
int getLastTicket(){

datetime time=0;
int t=-1;

  for(int i=OrdersTotal()-1; i>=0; i--){
     if(OrderSelect(i, SELECT_BY_POS)){            // выбираем ордер
        if(OrderSymbol()==Symbol()){               // если наш символ
           if(OrderOpenTime()>time){               // время выбранного ордера больше чем известные другие
              time=OrderOpenTime();                // запоминаем большее время
              t=OrderTicket();                     // и запоминаем тикет
           }
        }
     }
  }
  return(t);
}
 
nazim25:

беда в том советник постоянно выполняет не верные расчеты и у меня следюший лот открываеться с неправильным объемым

Всё бредово

 
Vasiliy Pushkaryov:

Попробуйте последний ордер с помощью этой функции получить.

спосибо за ответ . ну блин чо то не получило с . в тесторе такаеже ошибка

 
люди добрые есть ли какие нибуть ешо идеии . ато придется каждый лот в ручную прописовать не хотелось бы
 
double Lots=0.0, LotsBuy=0.0, LotsSell=0.0;
datetime t=0,tb=0,ts=0;

for(int i=OrdersTotal()-1;i>=0;i--) 
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
   if(t<OrderOpenTime()) {t=OrderOpenTime();Lots=OrderLots();} //Последний объём лота любой позиции
   if(OrderType()==OP_BUY) {
   if(tb<OrderOpenTime()) {tb=OrderOpenTime();LotsBuy=OrderLots();} //Последний объём лота buy
     }
   if(OrderType()==OP_SELL) {
   if(ts<OrderOpenTime()) {ts=OrderOpenTime();LotsSell=OrderLots();} //Последний объём лота sell
     }
}

открытия с учётом предыдущего лота

int send=OrderSend(Symbol(),OP_BUY,LotBuy+0.01,Ask,10,0,0,"Buy",Magic,0,Blue);
    send=OrderSend(Symbol(),OP_SELL,LotSell+0.01,Bid,10,0,0,"Sell",Magic,0,Red);
 
FXwin:

это вам помогло

 
nazim25:

это вам помогло

Это вам должно помочь, мне то это зачем))

 
FXwin:

Это вам должно помочь, мне то это зачем))

сожелению тестор опять такой жу ошибку делает. ну серавно спосибо за сторание

 
nazim25:

сожелению тестор опять такой жу ошибку делает. ну серавно спосибо за сторание

Какую ошибку именно?
Подробней какой принцип открытий пошагово должен быть.

 
FXwin:

Какую ошибку именно?
Подробней какой принцип открытий пошагово должен быть.

мне нужно чтоб следюший объем лота бы больше переведюшего и во на оприделеным этапе ордера открываеться одим лотом

Файлы:
zpb1n1oj1j.png  117 kb