Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



кто доработает советник?

На этом сайте, в разделе «файловый архив», выложен неприметный советник «Lok V4», суть работы его проста:
выставляются две отложки в противополжных направлениях, при срабатывании одного из ордеров к противоположному дополнительно добавляется оложенный ордер величины IncLot(так названо в параметрах),
эту процедуру)) данный советник делает одноразово, поэтому, при «неверном» движении цены либо слив, либо долгое ожидание возвращения цены.У меня просьба «подкрутить» в программе, что бы эту процедуру (по увеличению локирующего ордера) советник делал многократно, до срабатывания одного из ордеров по тп или если не сложно, чтобы данное количество циклов добавленя доп. ордеров было настраиваемым, так же не откажусь от советов, замечаний и тд по доработке.., сам то я нуб) на этом форексе.

дополнительно прилагаю схему желаемой доработки и на всякий случай всю программу самого советника Lok v4.
на схеме цыфрами показан общий лот на каждом из участков в зависимости от движения цены, кстати, если «прикрутить» трал, то получится почти небезъизвестный платный советник ParaStop v8.1



ps — да, забыл, при закрытии ордера по тп и выставлении новой пары, оставшаяся отложка удаляется.

extern string s0 = "========== Position entry ========== ";
extern int Step = 10;
extern int MaxOrders = 1000;
extern double FirstLot = 0.01;
extern double IncLot = 0.01;
extern int Digit = 5;

extern string s1 = "========== Trading Window ========== ";
extern string PlaceTradesFrom = «00:00»;
extern string PlaceTradesTo = «23:59»;

extern string s2 = "============ Profit Taking ============ ";
extern double MinProfit = 5.0;
extern int DailyProfitTarget = 0;

extern string s3 = "============ Stop Loss ============ ";
extern string MaxLoss = «0=none; 1=pips (position with largest loss); 2=percent (all orders)»;
extern int MaxLossMethod = 1;
extern int MaxLossPips = 100;
extern int MaxLossPct = 5;

extern string s4 = "============ EA Settings ============ ";
extern int MaxRetry = 3;
extern int Slippage = 3;
extern int Magic = 2008;

double sellLots = 0.0;
double buyLots = 0.0;
double lastSellPrice;
double lastBuyPrice;
int LastOrder;
double pt;

int init()
{
pt = Point;
if (Digits == 3 || Digits == Digit) {
Slippage *= 10;
pt = 10*pt;
}
return(0);
}

int start() {
string txt;
int totalOrders = MyOrdersTotal(Magic);
if (GetTotalProfit(Magic) >= MinProfit) {
Print(«Profit target reached»);
DeletePendingOrders(Magic);
CloseOrders(Magic);
}
if (MaxLossMethod == 1 && GetMaxLossPips(Magic) >= MaxLossPips)
{
Print(«Maximum loss (pips) reached»);
DeletePendingOrders(Magic);
CloseOrders(Magic);
}
else if (MaxLossMethod == 2 && GetTotalProfit(Magic) <= -1*AccountBalance()*MaxLossPct/100)
{
Print(«Maximum loss reached»);
DeletePendingOrders(Magic);
CloseOrders(Magic);
}
GlobalVariableSet(«OldBalance», AccountBalance());
if (!IsInTimeWindow(PlaceTradesFrom, PlaceTradesTo))
{
if (totalOrders > 0) {
DeletePendingOrders(Magic);
}
txt = «Not in trading window»;
}
else
{
txt = «In trading window\nDaily profit: » + DoubleToStr(GetDailyProfit(Magic), 2);
if (totalOrders == 0 && (DailyProfitTarget == 0 || DailyProfitTarget > GetDailyProfit(Magic))) {
int res=OrderSend(Symbol(), OP_SELLSTOP, FirstLot, Bid — Step * pt, 3, 0, 0, "", Magic, 0, Red);
res=OrderSend(Symbol(), OP_BUYSTOP, FirstLot, Ask + Step * pt, 3, 0, 0, "", Magic, 0, Green);
}
else
{if (totalOrders==2 && (DailyProfitTarget <= GetDailyProfit(Magic))) {txt = txt + "\nDaily target reached.";
lastSellPrice = GetLastSellPrice(Magic);
LastOrder = GetLastOrder(Magic);
lastBuyPrice = GetLastBuyPrice(Magic);
switch(LastOrder)
{
case OP_BUY: res=OrderSend(Symbol(), OP_SELLSTOP, buyLots + IncLot, lastSellPrice, 3, 0, 0, "", Magic, 0, Green); break;
case OP_SELL: res=OrderSend(Symbol(), OP_BUYSTOP, sellLots + IncLot, lastBuyPrice, 3, 0, 0, "", Magic, 0, Red); break;
}
}}
}
Comment(txt);
return (0);
}

int DeletePendingOrders(int magic) {
int total;
total = OrdersTotal();
for (int i = total-1; i >= 0; i--) {
bool sel=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() && (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP))
{
Print(«closing pending order », i, ", ticket #", OrderTicket());
bool del=OrderDelete(OrderTicket());
}
}
return (0);
}

int CloseOrders(int magic) {
int total;
double price;
total = OrdersTotal();
for (int i = total-1; i >= 0; i--) {
bool sel=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol()) {
RefreshRates();
Print(«closing trade », i, ", ticket #", OrderTicket());
if (OrderType() == OP_BUY) price = Bid; else price = Ask;
for (int k=1; k <= MaxRetry; k++)
{
Print(«closing order », i, ", ticket #", OrderTicket());
if (OrderClose(OrderTicket(), OrderLots(), price, Slippage)) break;
Print(«Error closing trade: », GetLastError());
}
}
}
return (0);
}

int MyOrdersTotal(int magic) {
int count;
int total;
count = 0;
total = OrdersTotal();
for (int i = 0; i < total; i++) {
bool sel=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol()) count++;
}
return (count);
}

double GetLastSellPrice(int magic) {
int total;
total = OrdersTotal() — 1;
for (int i = total; i >= 0; i--) {
bool sel=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() && (OrderType() == OP_SELL || OrderType() == OP_SELLSTOP )) {
sellLots = OrderLots();
return (OrderOpenPrice());
}
}
return (0);
}

double GetLastBuyPrice(int magic) {
int total;
total = OrdersTotal() — 1;
for (int i = total; i >= 0; i--) {
bool sel=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() && (OrderType() == OP_BUYSTOP || OrderType() == OP_BUY )) {
buyLots = OrderLots();
return (OrderOpenPrice());
}
}
return (0);
}

double GetLastOrder(int magic) {
int total;
total = OrdersTotal() — 1;
for (int i = 0; i <OrdersTotal(); i++) {
bool sel=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() &&( OrderType() == OP_SELL || OrderType() == OP_BUY )) {
LastOrder = OrderType();
return (OrderType());
}
}
return (100000);
}

int GetMaxLossPips(int magic) {
int i, pips;
int maxLoss = 0;
i = OrdersTotal() — 1;
for (int k = i; k >= 0; k--) {
bool sel=OrderSelect(k, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() && (OrderType() == OP_BUY || OrderType() == OP_SELL)) {
if (OrderType() == OP_BUY) pips = Ask-OrderOpenPrice(); else pips = OrderOpenPrice()-Bid;
pips = pips/pt;
if (pips < 0 && MathAbs(pips) > maxLoss) maxLoss = MathAbs(pips);
}
}
return (maxLoss);
}

double GetTotalProfit(int magic) {
int i;
double total = 0;
i = OrdersTotal() — 1;
for (int k = i; k >= 0; k--) {
bool sel=OrderSelect(k, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() && (OrderType() == OP_BUY || OrderType() == OP_SELL)) {
total += OrderProfit();
}
}
return (total);
}

double GetDailyProfit(int magic) {
int i;
double total = 0;
i = OrdersHistoryTotal() — 1;
for (int k = i; k >= 0; k--) {
bool sel=OrderSelect(k, SELECT_BY_POS, MODE_HISTORY);
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() && (OrderType() == OP_BUY || OrderType() == OP_SELL)) {
int dt1 = TimeYear(TimeCurrent())*10000+TimeMonth(TimeCurrent())*100+TimeDay(TimeCurrent());
int dt2 = TimeYear(OrderOpenTime())*10000+TimeMonth(OrderOpenTime())*100+TimeDay(OrderOpenTime());
// Print(dt1, " ", dt2);
if (dt1 == dt2 )
total += OrderProfit();
}
}
return (total);
}

bool IsInTimeWindow(string t1, string t2)
{
string tc = TimeToStr(TimeCurrent(), TIME_MINUTES);
if (t2 > t1)
return (tc >= t1 && tc <= t2);
else
return (tc >= t1 || tc <= t2);
}
  • 0
  • Просмотров: 2851
  • 27 апреля 2015, 03:08
  • russwill
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Добавить мартингейл в советник
Следующая запись в группе  
Прикрутить трейлинг и бу к сову.
26 апреля 2015
27 апреля 2015

Брокер для ваших роботов, 15 лет на рынке

Комментарии (3)

+
0
Для начала посмотрите похожие советники, может вам что-то подойдет из них:
opentraders.ru/downloads/577/
opentraders.ru/downloads/581/
opentraders.ru/downloads/617/
И сейчас наиболее обсуждаемый в топике:
opentraders.ru/downloads/648/
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 27 апреля 2015, 12:11
+
+1
Спасибо девушка(не знаю как Вас звать)за рекомендованные советники… первый же проверенный похоже, как раз так и работает… я ведь догадывался, что не может быть, что такая простая идея, еще кем то не реализованна в бесплатном виде, но искать в интернете и проверять советники достаточно долго и сложно.
зы-пост можете удалить за ненадобностью,… хотел сам, но куда то делась кнопка «удалить\редактировать»(??)
avatar

  2  russwill Автор Сообщений: 63

  • 27 апреля 2015, 12:58
+
0
Редактировать пост можно только в течение короткого промежутка времени, это сделано специально, для тех, кто публикует прогнозы. Удалить пост вы тоже уже не можете. Плюс этот пост может помочь кому-то другим, кто ищет подобные советники, поэтому пусть будет.
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 27 апреля 2015, 13:05

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий