Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 219

 
artmedia70:
Все Buy и все Sell - два разных скрипта. Это с самого начала было ясно. Вопрос вот в чём - он должен закрыть абсолютно все позиции? Или же он должен закрыть только те позиции, которые находятся на том графике, на котором запущен скрипт? Он должен закрыть позиции, открытые вручную или позиции, открытые каким-либо советником, или и те и другие?

Все абсолютно но по типу на том графике на котором скрипт, чтобы максимально простой получился желательно никаких предупреждений, никаких вопросов, повесил на клавиши, нажал, сработал, все. а то бывает понапишут еррроры проверки всякие и т.д., мне кажется такому скрипту этого ничего не надо. Я советниками не пользуюсь, я только тринеруюсь щас, занятия в жизни бближайший месяц пару не намечается потому решил форекс посмотреть, что да к чему.
 
bambastik:
Все абсолютно но по типу на том графике на котором скрипт, чтобы максимально простой получился желательно а то понапишут еррроры проверки всякие и т.д., мне кажется такому скрипту этого ничего не надо. Я советниками не пользуюсь, я только тринеруюсь щас, занятия в жизни бближайший месяц пару не намечается потому решил форекс посмотреть, что да к чему.

Так вот как раз обработка торговых ошибок отличает в данном случае хороший скрипт от учебного пособия. Вам как нужно - поучиться на нём или чтобы он отрабатывал 100% ?

Если вам нужен просто принцип, то вот:

//-----------------------------------------------------------------------------+
void start() {
   string sy=Symbol();
   int    i, k=OrdersTotal()-1;

   for (i=k; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()>1)      continue;
         if (OrderType()==OP_BUY)   OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);
         if (OrderType()==OP_SELL)  OrderClose(OrderTicket(),OrderLots(),Ask,5,Red);
         }
      }
   return;
}
//-----------------------------------------------------------------------------+

Закрывает и Buy и Sell.

Нет абсолютно никаких обработок ошибок. Для себя сами сможете сделать закрытие только Buy или только Sell - одну строчку удалить.

Ну... вот только Buy:

//-----------------------------------------------------------------------------+
void start() {
   string sy=Symbol();
   int    i, k=OrdersTotal()-1;

   for (i=k; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()==OP_BUY)   OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);
         }
      }
   return;
}
//-----------------------------------------------------------------------------+

Для Sell:

//-----------------------------------------------------------------------------+
void start() {
   string sy=Symbol();
   int    i, k=OrdersTotal()-1;

   for (i=k; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()==OP_SELL)  OrderClose(OrderTicket(),OrderLots(),Ask,5,Red);
         }
      }
   return;
}
//-----------------------------------------------------------------------------+
 

Приогромная благодарность. Это то что нужно. Со строчками разобрался сразу, спасибо) но вот что такое ред и блуе и для чего, наверное показывает точку сброса каждого ордера, да? Когда испробую, сразу в кодебазу добавлю by artmedia70. А кстати зачем нужны обработки обышок если скрипт четкий и разработчик в нем уверен?

И может мне не надо кстати добавлять их а сам разработчик т.е. artmedia70 добавит в кодебазу, они там окажуться востребованы, да и акаунта у меня там нет, да и на комментарии ответить не слова не смогу, а?

 
bambastik:

Приогромная благодарность. Но это то что нужно. Со строчками разобрался сразу, спасибо) но вот что такое ред и блуе и для чего, наверное показывает точку сброса каждого ордера, да? Когда испробую, сразу в кодебазу добавлю by artmedia70.

Нет, в котобазу - ни в коем случае не нужно. Я привык делать надёжные вещи, а не учебные пособия :)

Если б я вам показал нормальный скрипт, вы бы мне сказали, что я опять, как и все, понаписал всяких ерроров... Но... без них нельзя. Это ж - работа с нашими деньгами.

Blue и Red - это цвет значка закрытия.

 
artmedia70:

Нет, в котобазу - ни в коем случае не нужно. Я привык делать надёжные вещи, а не учебные пособия :)

Если б я вам показал нормальный скрипт, вы бы мне сказали, что я опять, как и все, понаписал всяких ерроров... Но... без них нельзя. Это ж - работа с нашими деньгами.

Blue и Red - это цвет значка закрытия.


Все, про котобазу понял, про ред и блуе тоже, вообщем еще раз огромное спасибо за помощь, но все равно выкать не начну если только очень редко, интернет имхо обязан быть дальше этих реверансов и флеров и нести только мысль и кстати одно ты может быть в сто раз уважительней чем тыща вы. но это лирика) вообщем artmedia70 спасибо огромное, оч скрипт выручил и в котобазу с ним я ни ногой. а деньги не наши кстати, таких много было за всю историю которые так считали и что и где они теперь и имхо деньги все же отменят скоро реал, оставят виртуал и залимитят, чтоб каждый смог иметь на счете строго идентифицируемом не более энной суммы, остальное в бюджет и т.д. так что я к ним отнощусь спокойно но вот сам процесс от деятельности с ними это да, интересно. п.с. сорри за многословие.
 
bambastik:

А кстати зачем нужны обработки обышок если скрипт четкий и разработчик в нем уверен?

Разработчик будет уверен в работе своей программы только в том случае, если его программа будет обрабатывать возвращаемые ошибки торгового сервера. Если обработку ошибок не делать, то программа может споткнуться при первой же ошибке. Ошибка НЕ программы, а ошибка, которую возвращает торговый сервер. Например - в приведённом скрипте нет получения свежих данных. Значит сервер может вернуть ошибку о неверной цене. Для этого нужно перед закрытием постараться получить самое последнее торговое окружение - выполнить команду RefreshRates(); или вместо цены закрытия Ask или Bid использовать цену, полученную посредством MarketInfo(Symbol(),MODE_ASK); или MarketInfo(Symbol(),MODE_BID);

Тогда скрипт примет уже такой вид (для Sell):

//-----------------------------------------------------------------------------+
void start() {
   string sy=Symbol();
   int    i, k=OrdersTotal()-1;
   
   for (i=k; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()==OP_SELL)  {
            double pp=MarketInfo(sy,MODE_ASK);
            OrderClose(OrderTicket(),OrderLots(),pp,5,Red);
            }
         }
      }
   return;
}
//-----------------------------------------------------------------------------+

А если постараться обработать и другие ошибки, возвращаемые сервером, то он будет разрастаться до тех величин, когда вы скажете - "опять понаписали..." :)

 

Теперь понял все и да, это важно. Интернет у нас щас никуда не годится это факт, железо тоже еще молодо, потому на них надеяться на все двести процентов не совсем и разумно, но риск дело благородное =) а за дополнение опять спасибо, добавлю к себе и в buy и в sell.

это правильно для buy?

void start() {
string sy=Symbol();
int i, k=OrdersTotal()-1;

for (i=k; i>=0; i--) {
if (OrderSelect(i,SELECT_BY_POS)) {
if (OrderSymbol()!=sy) continue;
if (OrderType()==OP_BUY) {
double pp=MarketInfo(sy,MODE_BID);
OrderClose(OrderTicket(),OrderLots(),pp,5,Blue);
}
}
}
return;
}

А если нужно из 5 buy сбросить только 3 ордера buy из всех имеющихся, стоимость которых самая большая, скрипт больше по размерам получится artmedia70? И еще один вопрос если не надоел спрашивать, ведь на эти проверки все время нужно, интересно вероятность проскока у какого скрипта выше у того, который с проверками или у того который без проверок на еррроры?

 
bambastik:

Теперь понял все и да, это важно. Интернет у нас щас никуда не годится это факт, железо тоже еще молодо, потому на них надеяться на все двести процентов не совсем и разумно, но риск дело благородное =) а за дополнение опять спасибо, добавлю к себе и в buy и в sell.

это правильно для buy?

Да. Только это ещё не всё... ;)

Этот скрипт, помимо оставшихся необработанных подобных ошибок, кроме того, будет ещё и "чужие" ордера трогать. Т.е., если у вас на этом символе работает какой-либо советник, то скрипт будет закрывать и его позиции, а он, в свою очередь, будет их опять открывать. Так они и будут друг с другом "спорить".

Чтобы этого не происходило, нужно ограничить скрипт и по магику. Т.е., добавить строку if (OrderMagicNumber()>0) continue; Тогда скрипт будет отрабатывать только ордера, открытые вручную.

Для Sell:

//-----------------------------------------------------------------------------+
void start() {
   string sy=Symbol();
   int    i, k=OrdersTotal()-1;
   
   for (i=k; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderMagicNumber()>0)  continue;
         if (OrderSymbol()!=sy)     continue;
         if (OrderType()==OP_SELL)  {
            double pp=MarketInfo(Symbol(),MODE_ASK);
            OrderClose(OrderTicket(),OrderLots(),pp,5,Red);
            }
         }
      }
   return;
}
//-----------------------------------------------------------------------------+

И много там ещё чего дорабатывать для "нормальной" надёжности. Придёт со временем, не сомневайтесь. ;)

 
artmedia70:

Да. Только это ещё не всё... ;)

Этот скрипт, помимо оставшихся необработанных подобных ошибок, кроме того, будет ещё и "чужие" ордера трогать. Т.е., если у вас на этом символе работает какой-либо советник, то скрипт будет закрывать и его позиции, а он, в свою очередь, будет их опять открывать. Так они и будут друг с другом "спорить".

Чтобы этого не происходило, нужно ограничить скрипт и по магику. Т.е., добавить строку if (OrderMagicNumber()>0) continue; Тогда скрипт будет отрабатывать только ордера, открытые вручную.


целая наука, вау =) ну мне до такого далеко знания этого всего дела, да и не дойду никогда до советников, индикаторов, сигналов и остального, так что мне так чисто, в доту играть надоедает и я начинаю втыкать в график, обожаю смотреть на движение это, красиво очень, так что я только так, для общего развития учту и да теперь хоть понял что такое магик ордер который открыт неавтоматом и не советником, хотя наверное это одни и те же люди ;)
 
можете написать: скрипт/советник на закрытие двух противоположных ордеров по прибыли в n*пунктах?