Разработка универсального и работающего шаблона для экспертов. - страница 2

 
HIDDEN,
мне кажется, ты не до конца понимаешь о чём я говорю.

1. Я думаю, что никакой универсальный шаблон нельзя создать в принципе. Ни в природе, ни в среде программирования нет ничего универсального. Невозможно создать "Унивесальный механизм". Не бывает такого. Можно только в одном техническом решении объединить несколько полезных функций. Например идея универсальной мясорубки развилась до уровня кухонного комбайна. Но этим дело и ограничилось. Развивать кухонный комбайн до уровня универсального механизма, чтоб он и пылесосил, и посуду мыл, и ездил, и в магазин ходил - бессмысленно. Теоретически сделать можно, но он получится громоздким и всё равно "все" функции включить в него не удастся.

2. Если всё же поставить такую задачу и пытаться её решать, то не такими средствами, кот. ты предлагаешь. Это оч. серьёзная задача, требующая серьезного подхода с коллективом порграммистов, подчинённых одному гениальному проэктировщику, кот. точно знает что и как делать. Общественными усилиями эта задача решена никогда не будет. Я уже сказал, это пустая затея.

3. Частным решением этой задачи является такой подход: разбить весь механизм на локальные части, выполняющие определённую работу, решающие определённый ограниченный круг задач. Позднее из этих частей кто-то индивидуально или в небольшом коллективе может создать советник. Так обычно и делается. Так появляются библиотеки скриптов, функций и пр. Если ты хочешь принять в этом участие, то напиши для начала отдельный скрипт, решающий одну задачу так и таким способом, кот. представляется тебе правильным, выложи код на форуме и обсудим что в этом скрипте хорошо, а что требует доработки.
 
C универсальным шаблоном я все понял, каждый делает под себя. Помоги исправить мой шаблон так чтобы... вопрос из 3 поста
Все бы ничего, но вот такой ньюанс. Скажем есть ордер BUY, и поступает сигнал на SELL, ордер должен исполнится, при этом BUY не закрывается. Данный шаблон не позволяет открывать больше 1-й позиции по одной валюте. Пробывал дорабатывать но эксперт начинает глючить, так как хочится что-бы больше одной ставки в одну сторону эксперт не исполнял.
 
ОК.
Я говорил уже, что занят сейчас написанием своего эксперта, поэтому много времени уделить не смогу.
Полагаю, что сделать нужно так.
1. Выложить код, прошедший компиляцию. В твоём коде как минимум одна ошибка: return(True), где True написано с большой буквы, т.е это не Истина, а некот. неопределённая переменная. Компилятор наверняка выдал ошибку. Добейся отсутствия ошибок.
2. После этого посмотрим каких функциональных частей не хватает. По-моему, не всё в порядке с анализом имеющихся ордеров.
3. Обязательно пиши к каждой строке комментарий.
4.(это не обязательно, но желательно: у меня, ты видел, несколько иной стиль расставления скобок, мне трудно воспринимать твой код, если не лень, хорошо бы его упорядочить)
----
При этих условиях можно надеяться довести твой советник до желаемой работоспособности.
 
Я бы работал и с твоим шаблоном, но у меня нету всех тех библиотек каторые ты используешь.
Постараюсь все сделать как ты просишь и отпешусь. Да и большая помощь пока не нужна, только разобраться с моей проблемой.
 
SKif:
ОК.
Я говорил уже, что занят сейчас написанием своего эксперта, поэтому много времени уделить не смогу.
Полагаю, что сделать нужно так.
1. Выложить код, прошедший компиляцию. В твоём коде как минимум одна ошибка: return(True), где True написано с большой буквы, т.е это не Истина, а некот. неопределённая переменная. Компилятор наверняка выдал ошибку. Добейся отсутствия ошибок.
...
True и true - одно и то же. Слава сказал, что так сделали специально для облегчения миграции с МТ3.
 
Rosh:
True и true - одно и то же. Слава сказал, что так сделали специально для облегчения миграции с МТ3.
Не проверял. Может и так.
Но в коде на форуме - разным цветом. Я не знаю какой код используется при обработке кодов на форуме. Если текущий МЕ, то не ваша со Славой правда; если какой-то свой, то его надо привести в соответствие с МЕ.

Разработчики, обратите внимание.
 
HIDDEN,
у меня пока никаких библиотек нету. Я как раз пытаюсь их создавать.
Посмотри готовые решения здесь, на форуме https://www.mql4.com/ru/codebase/
 
Логические константы (bool)
Логические константы имеют значение true (истина) или false (ложь), числовое представление которых - 1 или 0 соответственно. Могут использоваться написания True, TRUE, False и FALSE.
а на форуме ещё не подсвечивается "string" ;)
 
Вот так всегда, не знаешь где упадёшь..
 
Никак не разберусь как сделать такую функцию как открытие BUY по сигналу и сразу открытие противоположной сделки. и что-бы по данной валюте эксперт больше 2-х поз не открывал. Эксперт должен понимать по каким парам открыты 2 сделки и если по паре открыта 1 сделка то открываем противоположную. Помогите разобраться с этой проблемой, при тестах вот такая фигня выскакивает:
1 2001.01.03 02:06 sell 1 0.10 1.6010 1.6115 1.5510 0.00 10000.00
2 2001.01.03 02:07 buy 2 0.10 1.6015 1.5910 1.6515 0.00 10000.00
3 2001.01.03 02:08 buy 3 0.10 1.6011 1.5906 1.6511 0.00 10000.00
........................

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

Вот код эксперта.
//+------------------------------------------------------------------+ //| e.mq4 | //| Copyright © 2005, HIDDEN | //+------------------------------------------------------------------+ #define MAGIC 15122005 extern string _Parameters_Trade = "Основные параметры торговли."; extern double StopLoss = 100; //Уровень S/L extern double TakeProfit = 500; //Уровень T/P extern int Slippage = 3; //Проскальзование extern double Lots = 0.10; //Начальный лот extern string Name_Expert = "E"; // Название эксперта extern string _Color_Trade = "Цвета для позиций"; extern color clOpenBuy = Blue; //Открытие BUY extern color clModifyBuy = Blue; //Модификация BUY extern color clCloseBuy = Aqua; //Закрытие BUY extern color clOpenSell = Red; //Открытие SELL extern color clModifySell = Red; //Модификация SELL extern color clCloseSell = Violet; //Закрытие SELL extern string _Sound_Trade = "Звуковые эффекты вкл./откл."; extern bool UseSound = True; extern string NameFileSound = "alert.wav"; int start(){ //+------------------------------------------------------------------+ //| Условия на открытие | //+------------------------------------------------------------------+ if (OrdersTotal( )>=1){ OpenBuy(); } if (OrdersTotal( )<2){ OpenSell(); } } //+------------------------------------------------------------------+ //| Открытие ордера BUY по рыночной цене. | //+------------------------------------------------------------------+ void OpenBuy() { double ldLot, ldStop, ldTake; string lsComm; ldLot = GetSizeLot(); ldStop = GetStopLossBuy(); ldTake = GetTakeProfitBuy(); lsComm = GetCommentForOrder(); OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy); if (UseSound) PlaySound(NameFileSound); } //+------------------------------------------------------------------+ //| Открытие ордера SELL по рыночной цене. | //+------------------------------------------------------------------+ void OpenSell() { double ldLot, ldStop, ldTake; string lsComm; ldLot = GetSizeLot(); ldStop = GetStopLossSell(); ldTake = GetTakeProfitSell(); lsComm = GetCommentForOrder(); OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell); if (UseSound) PlaySound(NameFileSound); } string GetCommentForOrder() { return(Name_Expert); } double GetSizeLot() { return(Lots); } double GetStopLossBuy() { return (Bid-StopLoss*Point);} double GetStopLossSell() { return(Ask+StopLoss*Point); } double GetTakeProfitBuy() { return(Ask+TakeProfit*Point); } double GetTakeProfitSell() { return(Bid-TakeProfit*Point); }
Причина обращения: