# Доработка ботов (советников, индикаторов)

Раздел: Язык программирования MQL4
Автор темы: machzelet
Создана: 2010-02-26 20:00
Ответов: 12060 | Просмотров: 1841478
Страница 73 из 604
Источник: https://forexsystemru.com/threads/61956/page-73

---

## eevviill — 2012-06-25 10:41

> Цитата (Avril):
> eevviill, Спасибо.
> Я хотела бы вот эти строчки
> SetIndexBuffer(3,dnArrow); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(5,242);
> SetIndexBuffer(4,upArrow); SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(6,241);
> перенести, например, в TmaTrue with Distances.mq4, никак не получится нигде прописать?

 Судя по тому что вы написали вам ещё надо доучивать mql4 чтобы менять индикаторы. Вы написали просто что буфер 3 и 4 рисовать данные с dn up Arrow, стиль стрелок и т.д. 2 индикатора в одном не выйдет. Почитайте мои уроки, может ситуация яснее станет.

## Refa — 2012-06-25 12:09

**повторно**

> Цитата (Refa):
> Здравствуйте уважаемые. Если возможно, впишите пожалуйста в код советника "Лот от баланса".Буду Вам очень признателен.
> С уважением Рефа

Здравствуйте Я  в программировании неграмотный,но вот нашёл в инете следующее:

 внешние переменные
double Lots = 0.1;//начальный лот
extern double MaximumRisk = 0.1;//прогресия лота на каждые 500 баланса +0.1 лот. например депозит стал 1000 лот =0.2, 1500 лот =0.3 итд
extern double DecreaseFactor = 3.0;
extern double balans = 500; //шаг баланса 

далее функцию которая ниже ставите перед стартом.
double LotsOptimized() {
       double minlot = MarketInfo(Symbol(), MODE_MINLOT);
       double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);       
       double lot = Lots;
       int orders = OrdersHistoryTotal();
       int losses = 0;
       lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / balans, 2);
       if (DecreaseFactor > 0.0) {
for (int i = orders - 1; i >= 0; i--) {
       if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
       Print("Error in history!");
       break;
       }
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) losses++;
}
if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2);
}
if(lot < minlot) lot = minlot;
if(lot > maxlot) lot = maxlot; 
return (lot);}

далее в коде находите функцию OrderSend и вставляете в нее где лот
LotsOptimized()

ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,stop,Ask+Takeprofit*Point,"",MagicNumber,0,Green);

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) 

может быть подойдёт для данной совы
помогите пожалуйста

## Neo1 — 2012-06-25 17:51

Добрый день! С индикатора просьба сделать MTF версию, заранее спасибо! ОЧЕНЬ Нужен

## eevviill — 2012-06-25 21:26

> Цитата (Refa):
> Здравствуйте Я  в программировании неграмотный,но вот нашёл в инете следующее:
>
>  внешние переменные
> double Lots = 0.1;//начальный лот
> extern double MaximumRisk = 0.1;//прогресия лота на каждые 500 баланса +0.1 лот. например депозит стал 1000 лот =0.2, 1500 лот =0.3 итд
> extern double DecreaseFactor = 3.0;
> extern double balans = 500; //шаг баланса
>
> далее функцию которая ниже ставите перед стартом.
> double LotsOptimized() {
>        double minlot = MarketInfo(Symbol(), MODE_MINLOT);
>        double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
>        double lot = Lots;
>        int orders = OrdersHistoryTotal();
>        int losses = 0;
>        lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / balans, 2);
>        if (DecreaseFactor > 0.0) {
> for (int i = orders - 1; i >= 0; i--) {
>        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
>        Print("Error in history!");
>        break;
>        }
> if (OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue;
> if (OrderProfit() > 0.0) break;
> if (OrderProfit() < 0.0) losses++;
> }
> if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2);
> }
> if(lot < minlot) lot = minlot;
> if(lot > maxlot) lot = maxlot;
> return (lot);}
>
> далее в коде находите функцию OrderSend и вставляете в нее где лот
> LotsOptimized()
>
> ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,stop,Ask+Takeprofit*Point,"",MagicNumber,0,Green);
>
>
> int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
>
> может быть подойдёт для данной совы
> помогите пожалуйста

.

## Refa — 2012-06-25 22:10

eevviill   Огромное Вам СПАСИБО,только обьясните как работает функция extern double Risk = 1;

## eevviill — 2012-06-25 22:23

> Цитата (Refa):
> eevviill   Огромное Вам СПАСИБО,только обьясните как работает функция extern double Risk = 1;

Это процент от депозита. Если перед ним переменная use_... =тру, то лот будет расчитыватся от депо. Если=фолс то стандартный лот.

## Refa — 2012-06-25 22:42

У меня депо 10000  плечо 1:500  ставлю:  
 extern double Lots = 1.0;
extern bool use_percent_of_deposit = true;
extern double Risk = 8;

Начинаю торговлю- лот=1,0

Ставлю  extern double Risk любую цифру, всё равно лот=1

Может быть что то эдесь:
double GetLot(int Risk)
{double Free    =AccountFreeMargin();
 double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
 double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
 double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
 double Step    =MarketInfo(Symbol(),MODE_LOTSTEP);
 double Lot     =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
 if(Lot<Min_Lot) Lot=Min_Lot;
 if(Lot>Max_Lot) Lot=Max_Lot;
 if(Lot*One_Lot>Free) return(0.0);
return(Lot);}

## eevviill — 2012-06-25 23:06

> Цитата (Refa):
> У меня депо 10000  плечо 1:500  ставлю:
>  extern double Lots = 1.0;
> extern bool use_percent_of_deposit = true;
> extern double Risk = 8;
>
> Начинаю торговлю- лот=1,0
>
> Ставлю  extern double Risk любую цифру, всё равно лот=1
>
> Может быть что то эдесь:
> double GetLot(int Risk)
> {double Free    =AccountFreeMargin();
>  double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
>  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
>  double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
>  double Step    =MarketInfo(Symbol(),MODE_LOTSTEP);
>  double Lot     =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
>  if(Lot<Min_Lot) Lot=Min_Lot;
>  if(Lot>Max_Lot) Lot=Max_Lot;
>  if(Lot*One_Lot>Free) return(0.0);
> return(Lot);}

Исправил.
Не. Просто расчёт лота в инит поставил. А в ините один раз расчёты ведутся, а баланс меняется.

## Refa — 2012-06-25 23:21

депо 10000 плечо 1:500 ставлю: 
extern double Lots = 1.0;
extern bool use_percent_of_deposit = true;
extern double Risk =1;

Ордера открываются лот=3,08

Если extern double Risk =меньше 1,любое значение,то лот постоянно =0,01

## Yamakasi — 2012-06-26 06:49

Уважаемые програмисты можно ли сделать из данного упрощенного советника **FX Multi-Meter II** от которого оставили только Стохастик сделать чтобы он работал как индикатор?

## progo — 2012-06-26 12:33

Здравствуйте! Просьба к программистам заставить хаммера работать на счетах с рыночным исполнением, если это возможно конечно :-)

## nik8181 — 2012-06-26 14:36

> Цитата (Refa):
> депо 10000 плечо 1:500 ставлю:
> extern double Lots = 1.0;
> extern bool use_percent_of_deposit = true;
> extern double Risk =1;
>
> Ордера открываются лот=3,08
>
> Если extern double Risk =меньше 1,любое значение,то лот постоянно =0,01

Refa приветствую, если не затруднит  можешь сетом поделиться к данной сове?!?!?!:rolf: Заранее спасибо!!!

## Refa — 2012-06-26 14:54

> Цитата (nik8181):
> Refa приветствую, если не затруднит  можешь сетом поделиться к данной сове?!?!?!:rolf: Заранее спасибо!!!

Сначала нужно чтобы лот от баланса работал правильно,потом выкладываю сет(без обиды),на майском падении в почти 600 пунктов я заработал этим  сетом 45 баксов,сет не  жалко,но сначала правильная работа совы

## nik8181 — 2012-06-26 15:08

> Цитата (Refa):
> Сначала нужно чтобы лот от баланса работал правильно,потом выкладываю сет(без обиды),на майском падении в почти 600 пунктов я заработал этим  сетом 45 баксов,сет не  жалко,но сначала правильная работа совы

Да какие обиды, а тот сет который без лота от баланса меня как бы больше интересует!

## Refa — 2012-06-26 15:10

Вот eevviill появится ошибочку исправит,благодарность обьявим,выкладываем сет и пользуйтесь пожалуйста

## nik8181 — 2012-06-26 15:13

> Цитата (Refa):
> Вот eevviill появится ошибочку исправит,благодарность обьявим,выкладываем сет и пользуйтесь пожалуйста

Да не вопрос а eevviill уважуха да респект!!!:-)

## sochinik — 2012-06-26 23:01

> Цитата (eevviill):
> Ещё dll хочет и т.п.

Спасибо,но к сожалению функцию свою он не выполняет- не даёт работать котировкам с дукоса в тестере...извините за поздний ответ я уже не думал что кто то с ним поработает...

Уважаемые программисты есть соображение как  снизить вероятность слива у советника " Crazy Scalper v1.0MM" - (Скальпинг с высокой скоростью)  необходимо при срабатывании  в сетке отложенного ордера - выставление такого же противоположного отложенника с тралом....Я нифига не сображаю в програмирование....возможно ли доработать этот советник или нет?- был бы рад пообщаться с програмистом в скайпе, так как сущность всех мыслей на бумаге выложить не смог....

Сова может давать прибыль до 1000% в месяц но не застрахована от слива- эту страховку можно сделать, но я понимаю торговлю на форексе( стаж 3 года) и нифига не смыслю в програмировании....

## kamilkz — 2012-06-27 12:01

Посмотри может устроит
http://forexsystemsru.com/456943-post1477.html

## Влад2 — 2012-06-27 12:55

Здравствуйте.
Есть такой широкоизвестный советник Scalp-Investor. Хотелось бы его слегка "подправить" не меняя логику работы, на мой взгляд она весьма удачна, если не использовать настройки по умолчанию. Проблемы такие: 1. супермедленно оптимизируется, вероятно в код заложена какая-то "бяка", которая это обеспечивает. Соответственно найти и уничтожить 
бяку, быть может другая причина тормоза - вообщем убрать тормоз, ускорить оптимизацию. 2. в тестере стратегий постоянно мелькает ошибка Scalp-Investor v 2_1. GBPUSD,M1: OrderModify error 1. На демо такой ошибки нет, может она и не сказывается на реальной работе, и это глюк тестера, но раздражает, по-возможности устранить. Совсем мелочи, 
вывести магик в настройки, прикрутить звук, желательно разный на открытие-срабатывание ордеров. И последнее советник широко известен, когда-то имел открытый код, сейчас распространяется по партнёрским ссылкам с привязкой к счёту, в связи с этим к нему приковано активное внимание ДЦ. Хотелось бы очень-очень, при компиляции модифицировать 
(видоизменить) код до неузнаваемости, без ущерба функционалу, так чтобы автоматика ДЦ, не обнаруживала бы сабж. Понятно, что его можно будет распознать по логике работы, как что-то похожее, но таких похожих много. А с нестандартными настройками, другим магиком, звуком, он будет весьма оригинален. Надеюсь, на Вашу помощь. Основное конечно это "неузнаваемость" и скорость оптимизации.

## Влад2 — 2012-06-27 12:57

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

---

Следующая страница: https://forexsystemru.com/threads/61956/page-74
