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

 
chief2000:

При тестировании и оптимизации мы чаще всего используем одну валютную пару, получаем приемлемую прибыль, просадку. Потом повторяем для других валют. Но в итоге Советник должен будет торговать всеми интересующими нас валютами с одного торгового счета. Говорят что ожидаемая "суммарная" просадка может быть лучше той, что была получена для каждой валюты по отдельности (не раз где-то встречалось подобное мнение). Но ведь может быть и значительно хуже, если несколько Советников войдут в полосу неудач одновременно.

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

http://taverno.livejournal.com/2010/04/10/ Управление суммарным эквити у Seaboss реализовано под Омегу, есть ли подобные реализации под МТ?

 
Добрый вечер, уважаемые участники форума! Днем обращался, ни кто не отреагировал - нужен индикатор, отображающий вертикальные часовые линии в окне терминала, наверняка есть готовый, подскажите, где взять?
 
root:
Добрый вечер, уважаемые участники форума! Днем обращался, ни кто не отреагировал - нужен индикатор, отображающий вертикальные часовые линии в окне терминала, наверняка есть готовый, подскажите, где взять?

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

vik-777:

Помогите решить задачу

делаю выборку по всем закрытым позициям

for (int i=0; i<OrdersHistoryTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

после фильтрую по магическому номеру

if (OrderMagicNumber()==12)

фильтр удовлетворяет 3 позициям, а мне нужна только последняя закрытая по магику

не могу понять как оставить только последнею?

Спасибо

мне кто нибудь поможет неужели не кто не сталкивался
 
vik-777:
мне кто нибудь поможет неужели не кто не сталкивался

OrderCloseTime() вам в помощь
 
Figar0:

OrderCloseTime() вам в помощь
и что? я могу им найти последний закрытый ордер а мне нужен последний закрытый с магиком, скажите как сделать сравнение нескольких ордеров по OrderCloseTime()?
 
vik-777:
и что? я могу им найти последний закрытый ордер а мне нужен последний закрытый с магиком, скажите как сделать сравнение нескольких ордеров по OrderCloseTime()?

int LastClose =0;
int LastTicket;
for (int i=0; i<OrdersHistoryTotal(); i++)
{
  if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
  {
    if (OrderMagicNumber()==12)
    {
      if (OrderCloseTime()>LastClose)
      {
        LastClose=OrderCloseTime();
        LastTicket=OrderTicket();
      }
    }
  }
}

if (LastClose>0)
{
  if(OrderSelect(LastTicket, SELECT_BY_TICKET, MODE_HISTORY)==true)
  {
  //// Тра-та-та
  }
}
Корявенько и в лоб. Можно красивее и лаконичнее...
 
Figar0:

Корявенько и в лоб. Можно красивее и лаконичнее...
спасибо большое очень благодарен
 
Craft:

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

http://taverno.livejournal.com/2010/04/10/ Управление суммарным эквити у Seaboss реализовано под Омегу, есть ли подобные реализации под МТ?

Вот кое-что нашел (еще не прочел, но кажется по теме):

https://www.mql5.com/ru/forum/125825

 

Воопщем проходил я Теорию вероятности и по статистике если отложение ордера будут в радиусе 50пунктов от цены, то при открытии ордера с профитом в10 пунктов легче досягаем - если будет ещё и стоп лос в 10 пунктов (даже спред непомеха) движения тренда великая вещь...

Добавьте стоп лос независимо от StepStop

//+------------------------------------------------------------------+
//| Volfram.mq4 |
//| Vova-x@list.ru |
//| |
//+------------------------------------------------------------------+
#property copyright "Vova-x@list.ru"
#property link ""
//-----------------------------------------
extern int TakeProfit=10;
extern int StepStop=45;
extern double Lots=0.01;
extern bool MoneyManagement=true;
extern int MarginPercent=10;
//-------------------------------------------
int level_sell_stop;
int level_buy_stop;

//----------------------------------------------------------
void init()
{
// int minstop=MarketInfo(Symbol(),MODE_STOPLEVEL);
//Print("Уровень стопов: "+minstop);
}
//-----------------------------------------------------------
void start()
{
if (!IsTradeAllowed()) return;
level_buy_stop=0;
level_sell_stop=0;
StepingStop();
StepingPendings();
if (TotalBuy ()==0 && TotalBuyStop ()==0) SetBuyStop ();
if (TotalSell()==0 && TotalSellStop()==0) SetSellStop();
Comment("Level Buy Stop=",level_buy_stop*Point,
"\n","Level Sell Stop=",level_sell_stop*Point);
}
//---------------------------------------------------------------------------------------------
void StepingStop()
{
if (StepStop<1) return;
int ask, bid, open, stop, x;
double loss;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol())
if (OrderType()==OP_BUY)
{
bid=MathRound(Bid/Point);
open=MathRound(OrderOpenPrice()/Point);
stop=MathRound(OrderStopLoss()/Point);
x=(bid-open)/StepStop; x--; x*=StepStop;
level_sell_stop=open+x;
if (stop>=open+x)
loss=(open+x)*Point;
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE);
}
if (OrderType()==OP_SELL)
{
ask=MathRound(Ask/Point);
open=MathRound(OrderOpenPrice()/Point);
stop=MathRound(OrderStopLoss()/Point);
x=(open-ask)/StepStop; x--; x*=StepStop;
level_buy_stop=open-x;
if (stop>0 && stop<=open-x)
loss=(open-x)*Point;
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE);
}
}
}
//----------------------------------------------------------------------------
void StepingPendings()
{
int ask, bid, open;
double price, loss, profit;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol())
if (OrderType()==OP_BUYSTOP)
{
if (level_buy_stop==0)
open=MathRound(OrderOpenPrice()/Point);
if (open<=level_buy_stop)
price=level_buy_stop*Point;
loss=price-StepStop*Point;
profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE);
}
if (OrderType()==OP_SELLSTOP)
{
if (level_sell_stop==0)
open=MathRound(OrderOpenPrice()/Point);
if (open>=level_sell_stop)
price=level_sell_stop*Point;
loss=price+StepStop*Point;
profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE);
}
}
}
//-------------------------------------------------------------------
void SetBuyStop()
{
double lots=LotsCounting();
double price=Bid+StepStop*Point;
double loss=price-StepStop*Point;
double profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point;
int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price,0,loss,profit,"",0,0,CLR_NONE);
if (ticket<1) Print("Set a pending order failed with error #",GetLastError()," ",(GetLastError()));
}

void SetSellStop()
{
double lots=LotsCounting();
double price=Ask-StepStop*Point;
double loss=price+StepStop*Point;
double profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point;
int ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,price,0,loss,profit,"",0,0,CLR_NONE);
if (ticket<1) Print("Set a pending order failed with error #",GetLastError()," ",(GetLastError()));
}


int TotalBuy()
{
int count=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY) count++;
}
return (count);
}

int TotalBuyStop()
{
int count=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUYSTOP) count++;
}
return (count);
}

int TotalSell()
{
int count=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_SELL) count++;
}
return (count);
}

int TotalSellStop()
{
int count=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_SELLSTOP) count++;
}
return (count);
}

double LotsCounting()
{
double lots=Lots;
if (MoneyManagement)
{
double lotsize=MarketInfo(Symbol(),MODE_LOTSIZE);
double freemargin=AccountFreeMargin();
lots=0; if (lotsize>0) lots=NormalizeDouble((MarginPercent*freemargin/lotsize),1);
}
if (lots>10) lots=NormalizeDouble(lots,0);
if (lots<0.01) lots=0.01;
return (lots);
}


// End

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