[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 440

 
// ищем самый последний закрытый ордер
datetime time=0;
int ticket=-1;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
   {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==16384)
      {
         if(OrderCloseTime()>time)
         {
            time=OrderCloseTime();
            ticket=OrderTicket();
         }
      }
   }
}
if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
if(OrderProfit()<=0) Lots=OrderLots()*2;
//-----
Код вроде бы такой должен быть... но не проверял...
 
Vinin >>:

Может так лучше будет

Большое спасибо за помощь!!



Америка рыдает и Европа!

О будущем задумались всерьёз!

Им чудится финансовая ж--па,

и лищб России - по ... мороз!

Достанем с полки старую гармошку,

нам к кризисам таким не привыкать!

Была бы водка сало и картошка -

переживём мы всё, ядрёна мать!!!

ВСЕХ С 23 ФЕВРАЛЯ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
Summer, а как ты объявил переменную time в своем коде?
 
Necron >>:

Спасибо! Поправил в советнике на Ваш вариант. Вот допишу это чудо и выложу в Code Base как свое первое (более-менее) серьезное творение!=)) Система, по которой пишу советника называется Мутеки, только немного с моими дополнениями(по управлению позициями). Хорошо, что есть хотя бы индикатор, который построит все эти трендовые=)))

Только еще возник вопрос. Как открыть три позиции одновременно (или приблизительно по одной котировке)?Я делал следующим образом. Правильно ли, или есть другие способы? Отложенниками не получится=(( Маленькое расстояние иногда слишком:(


if(b1==0 && !IsTradeContextBusy())
{
if(Low[0]<HHL_1 && Bid>=HHL_1 && trade_buy==true)
{
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage*PointX,sl_b,BuyTarget1,"lot_1_buy",Magic,0,Lime);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("lot_1_buy order opened : ",OrderOpenPrice());
b1=1;
}
else Print("Error opening BUY order : ",GetLastError());

return(0);
}
}

здесь Вы один ордер открываете. попробуйте сразу 3, быстрее наврятли получиться на данном этапе.

Сам не экспериментировал, но, возможно, если запараллелить 3 торговых терминала и открывать сделки на каждом терминале в отдельности то может и получиться что-то выгадать...

 
StatBars >>:
Код вроде бы такой должен быть... но не проверял...

ошибка была, через алерт вывел, показало что лот всегда получается 0.


to Necron:


нашёл ошибку в коде и убрал, но всё же вот так ругается:



to Techno:

double)

Файлы:
graal_3.mq4  3 kb
 
Ты объявил переменную time как double, а надо datetime, исправь и проверь версию с твоим первоначальным кодом, он верен кажется
 
Summer:

Вот как у меня в одном из советников сделано:



double lt = getLots();//эта строчка в переменных, в ордерсенд пишем lt,


double getLots() { // это или перед start или после всего кода

double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
int round;
if(minlot==0.01)round=2;
if(minlot==0.1) round=1;
double koeff=2;
double result=Lots;

//int round = 2;
int total = OrdersHistoryTotal();
double spread = MarketInfo(Symbol(), MODE_SPREAD);

for (int i = 0; i < total; i++) {
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
if (OrderProfit() > 0) {
result = Lots;

} else {
result = OrderLots() * koeff;

}
}
}
result = NormalizeDouble(result, round);
if (result > maxlot) {
result = maxlot;
}
if (result < minlot) {
result = minlot;
}
RefreshRates();
return(result);
}

 

Techno, благодарствую за подсказку!) StatBars и Necron тоже спасибо.

но что бы уже точно мартингейл получился немного переделал код))

// ищем самый последний закрытый ордер
for(i=OrdersHistoryTotal();i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==Magic){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()>time){
          time=OrderCloseTime();
          profit=OrderProfit();
          
            //мартин
            if(profit<0) Lots=OrderLots()*2;
            if(profit>=0) Lots=0.1; // начальный лот
            //----
            
            
          }
        }
      }
    }
  }
}
//-----
 
StatBars >>:

здесь Вы один ордер открываете. попробуйте сразу 3, быстрее наврятли получиться на данном этапе.

Сам не экспериментировал, но, возможно, если запараллелить 3 торговых терминала и открывать сделки на каждом терминале в отдельности то может и получиться что-то выгадать...

Я понимаю, у меня их таких 6=) Три для покупки и три для продажи.Попробую потом на демке проверить. В крайнем случае буду что-то пробовать делать с отложенниками.

 
Summer >>:

ошибка была, через алерт вывел, показало что лот всегда получается 0.

double getLot()
{
if(OrdersHistoryTotal()==0)return(0.1);
// ищем самый последний закрытый ордер
datetime time=0;
int ticket=-1;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
   {
      if(OrderSymbol()==Symbol()/* && OrderMagicNumber()==16384*/)
      {
         if(OrderCloseTime()>time)
         {
            time=OrderCloseTime();
            ticket=OrderTicket();
         }
      }
   }
}
if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*2,2));
if(OrderProfit()>0)return(0.1);
//-----
}


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