Ответ
 
Опции темы
Старый 21.10.2013, 05:58   #1861 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,517
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2004
Сообщение от hoz Посмотреть сообщение
Хочу чтоб писалось всё как можно удобнее и гибче,
Твоё это хотение приводит к разрастанию кода до километровой длины.
Вот например у меня функция открытия ордеров всего 7 строк, не считая фигурных скобок. Эти 7 строк открывают ордера и Buy и Sell. Если добавить ещё 4 строки то будет открывать и стоповые и лимитные ордера. Но для чего они там если в советнике не предусмотрено их использование.
Ещё 7 строк занимают проверку открытия и вызов функции обработки ошибок. Вот и получается что максимум 18 строк для открытия ордеров 6ти типов. А теперь посчитай сколько строк у тебя...
Сообщение от hoz Посмотреть сообщение
Вот и думаю, нахрен или всё-таки возможно... Хотя пока что возможностей особо не наблюдается, хрень полнейшая выходит.
Я думаю что возможно... но нахрен.
Сообщение от hoz Посмотреть сообщение
На самом деле, я б очень рад был с кем-нить лично обсудить некоторые вещи,
Что касается с кем-то поговорить, я думаю тебе лучше выбрать того кто у тебя в авторитете и обратиться в личку. Дабы не получилось предложение от того с кем тебе не приятно общаться или его познания ниже твоих. Именно поэтому я не предлагаю.
Сообщение от hoz Посмотреть сообщение
т.к. иногда одно голова хорошо, а две бывает лучше.
Не всегда 2 головы лучше. Ведь не всегда эти головы думают в одном направлении. Как бы не получилось как в басне Крылова.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
chocolate (21.10.2013), eevviill (21.10.2013)
Старый 21.10.2013, 17:06   #1862 (permalink)
Активный участник
 
Аватар для Conn
 
Регистрация: 30.09.2013
Сообщений: 55
Репутация: 58
Conn
Сказал(а) спасибо: 22
Поблагодарили 57 раз(а) в 17 сообщениях
Поинты: 42
Уважаемые программисты обьясните пожалуйста, как вставить данные индикатора в код советника? скачал шаблон с этого поста Программирование советников по индикаторам - за 5 минут - шаблон в теме!, но не знаю как забить туда данные одного индикатора, кто нибудь покажет на примере, или обьяснить? хочу написать обычную сову на основе одного индикатора, не знаю с чего начать

Последний раз редактировалось Conn; 21.10.2013 в 17:09.
Conn вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 21.10.2013, 17:17   #1863 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Там вроде все написано!
Получаем данные пользовательского индикатора:
PHP код:
double ExampleCustom=iCustom(Symbol(),0,"Moving Averages",20,0,MODE_SMA,1); // Пример вызова пользовательского индикатора 
И по этим данным определяем Sig, который должен быть "1" для покупки и "2" для продажи.
Тут уж от индикатора зависит, при каких его показаниях вы присвоите переменной Sig единичку или двойку
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 21.10.2013, 18:57   #1864 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Твоё это хотение приводит к разрастанию кода до километровой длины.
Вот например у меня функция открытия ордеров всего 7 строк, не считая фигурных скобок. Эти 7 строк открывают ордера и Buy и Sell. Если добавить ещё 4 строки то будет открывать и стоповые и лимитные ордера. Но для чего они там если в советнике не предусмотрено их использование.
Ещё 7 строк занимают проверку открытия и вызов функции обработки ошибок. Вот и получается что максимум 18 строк для открытия ордеров 6ти типов. А теперь посчитай сколько строк у тебя...
Да разница то какая скока там строк. Суть в том, что главное, чтоб они висели на фоне. Ведь если уже при тестах какая-то сова особо понравится, и в ней увидется максимум перспективы, всегда можно переписать её код без библиотек или с минимумов их. А для написания большинства вариаций похожих операций, проще писать с библиотеками. Оно ж логично

Сообщение от AlexeyVik Посмотреть сообщение
Что касается с кем-то поговорить, я думаю тебе лучше выбрать того кто у тебя в авторитете и обратиться в личку. Дабы не получилось предложение от того с кем тебе не приятно общаться или его познания ниже твоих. Именно поэтому я не предлагаю.
Ну а чё там думать. Главное, чтоб не нуб Самое главное, чтоб были определённые знания и стремление к познаниям в том числе. Т.е. нежелание стопорится на достигнутом. В личку написать то можно, но через писанину тут наверно не выйдет разговор т.к. хз как тут объяснить что происходит Я такого нагородил, что сам в шоке. И неподготовленый ум не въедет в код сразу, да и не сразу тоже.
А по поводу Вас, так по ходу у Вас познаний то хватает, судя по постам на форуме.

Сообщение от AlexeyVik Посмотреть сообщение
Не всегда 2 головы лучше. Ведь не всегда эти головы думают в одном направлении. Как бы не получилось как в басне Крылова.
Да. Но своя голова для того, чтоб принять или не принять чью-то мысль. Ведь если кто курит или бухает неподалёку, это не не значит, что нужно делать так же. Проще обойти стороной. Так и тут, если что не так у кого-то или не согласие, проще обсудить и прийти к общему мнению. Тем более, я не циклюсь и всегда открыт новому. Есть же ещё, вроде со времён создания то ли С++ то ли Си, типа постулата такая, Не создай себе авторитета. Там смысл такой, что кто бы что ни сказал, нужно проверять всё, и, каждый может ошибаться. Так что не нужно заморачиваться а нужно идти вперёд и находить разные варианты решений. Вот к чему я веду.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 21.10.2013, 20:41   #1865 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,517
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2004
Сообщение от hoz Посмотреть сообщение
Так и тут, если что не так у кого-то или не согласие, проще обсудить и прийти к общему мнению. Тем более, я не циклюсь и всегда открыт новому.
Твои слова говорят об обратном
Сообщение от hoz Посмотреть сообщение
Да разница то какая скока там строк. Суть в том, что главное, чтоб они висели на фоне.
Да и я так-же зациклен. Нет у меня желания заниматься библиотеками, да и универсальность кода можно написать по-разному.
Я тебе предложил посчитать строки, а ты говоришь что нет никакой разницы. Видимо так-же будет и в личном общении... А может и нет... хз.
Я где-то говорил о том, что мне не нравится как пишет Ким. Хотя он, мне кажется, программист хороший. Так-же и твой код для меня трудно читаем.
Ты наверное заметил, что я перестал отвечать на твои вопросы, так вот это связано с трудностью чтения твоего кода, но у каждого свой стиль.
Сообщение от hoz Посмотреть сообщение
Ведь если уже при тестах какая-то сова особо понравится, и в ней увидется максимум перспективы, всегда можно переписать её код без библиотек или с минимумов их. А для написания большинства вариаций похожих операций, проще писать с библиотеками. Оно ж логично
А что касается сов для теста, так там и вовсе нет необходимости писать, например, проверку открылся-ли ордер, проверку на возможность постановки СЛ/ТП, обработку ошибок.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 21.10.2013, 21:39   #1866 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Твои слова говорят об обратном
Да и я так-же зациклен. Нет у меня желания заниматься библиотеками, да и универсальность кода можно написать по-разному.
Я тебе предложил посчитать строки, а ты говоришь что нет никакой разницы. Видимо так-же будет и в личном общении... А может и нет... хз.
Вообще то я не прошу ни кого писать как я, но обсудить подход можно. ХЗ, может мне всё-таки захотелось бы отказаться от некоторых подходов, которые уже стали привычными..

Сообщение от AlexeyVik Посмотреть сообщение
Я где-то говорил о том, что мне не нравится как пишет Ким. Хотя он, мне кажется, программист хороший.
Да, Ким программмист толковый. Хотя мне тоже не всё у него нравится, в том плане, что многовато лишних проверок всяких, которые вообще не нужны. А логика у него чёткая.

Сообщение от AlexeyVik Посмотреть сообщение
Так-же и твой код для меня трудно читаем.
Ты наверное заметил, что я перестал отвечать на твои вопросы, так вот это связано с трудностью чтения твоего кода, но у каждого свой стиль.
А я много строк то и не вылаживаю. Вопросы то всегда краткие Тут вон некоторые личности выкидывают километровые коды без bb-кода,.. так там вроде и проще, но мне на их вопросы тоже не хочется отвечать, в виду, их чрезмерной лени и пофигизма в плане оформления вопросов.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 22.10.2013, 04:41   #1867 (permalink)
Активный участник
 
Аватар для Conn
 
Регистрация: 30.09.2013
Сообщений: 55
Репутация: 58
Conn
Сказал(а) спасибо: 22
Поблагодарили 57 раз(а) в 17 сообщениях
Поинты: 42
для Andy200577,
Миниатюры:
Нажмите на изображение для увеличения
Название: eurusdh4.jpg
Просмотров: 29
Размер:	96.7 Кб
ID:	137018  
Вложения:
Тип файла: mq4 superfast.mq4 (5.5 Кб, 15 просмотров)
Conn вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 22.10.2013, 06:24   #1868 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,517
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2004
Сообщение от hoz Посмотреть сообщение
Вообще то я не прошу ни кого писать как я,
Ну значит ты не совсем правильно меня понял
Сообщение от hoz Посмотреть сообщение
но обсудить подход можно. ХЗ, может мне всё-таки захотелось бы отказаться от некоторых подходов, которые уже стали привычными..
А вот обсудить можно в любом варианте общения. Но это общение, как мне кажется, должно быть в виде вопрос-ответ-уточнение без попытки доказать свою правоту. Не нравится не принимается и всё.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 22.10.2013, 20:35   #1869 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Ну значит ты не совсем правильно меня понял
А вот обсудить можно в любом варианте общения. Но это общение, как мне кажется, должно быть в виде вопрос-ответ-уточнение без попытки доказать свою правоту. Не нравится не принимается и всё.
Ну так я об этом и говорю. Тока тут хз как начать. Довольно спецефические моменты.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 26.10.2013, 02:06   #1870 (permalink)
Активный участник
 
Аватар для Walt6730
 
Регистрация: 19.05.2009
Сообщений: 36
Репутация: 2
Walt6730
Сказал(а) спасибо: 15
Поблагодарили 2 раз(а) в 2 сообщениях
Поинты: 28
Господа знатоки!
Имеется условие: ордер открыт, и надо открыть такой же по объему (или бОльший) в противоположном направлении. Проблема именно в объеме: лот не фиксированный. Как прописать это в сове?
Walt6730 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 26.10.2013, 03:15   #1871 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от Walt6730 Посмотреть сообщение
Господа знатоки!
Имеется условие: ордер открыт, и надо открыть такой же по объему (или бОльший) в противоположном направлении. Проблема именно в объеме: лот не фиксированный. Как прописать это в сове?
У открытого ордера объем равен OrderLots() - можно использовать по своему усмотрению. В чем конкретно вопрос?
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (26.10.2013)
Старый 26.10.2013, 06:40   #1872 (permalink)
Активный участник
 
Аватар для Walt6730
 
Регистрация: 19.05.2009
Сообщений: 36
Репутация: 2
Walt6730
Сказал(а) спасибо: 15
Поблагодарили 2 раз(а) в 2 сообщениях
Поинты: 28
Сообщение от ansol Посмотреть сообщение
У открытого ордера объем равен OrderLots() - можно использовать по своему усмотрению. В чем конкретно вопрос?
Ну вот ситуация такая. Сова открывает ордера по тренду. Получается, скажем, 10 ордеров подряд в плюсах. На каждом ордере лот увеличивается на какую-то величину. Т.е., если первый ордер в серии был, скажем, 0.1 лота, то последний - 0.2. И вот когда открывается последний, происходит разворот рынка. Пока этот последний открыт - открывается ордер в противоположном направлении, но его объем должен равняться объему последнего ордера. Собственно, как прописать именно это условие: объем равен (или больше) объема последнего открытого ордера?
Walt6730 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 26.10.2013, 06:53   #1873 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,517
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2004
Сообщение от Walt6730 Посмотреть сообщение
Ну вот ситуация такая. Сова открывает ордера по тренду. Получается, скажем, 10 ордеров подряд в плюсах. На каждом ордере лот увеличивается на какую-то величину. Т.е., если первый ордер в серии был, скажем, 0.1 лота, то последний - 0.2. И вот когда открывается последний, происходит разворот рынка. Пока этот последний открыт - открывается ордер в противоположном направлении, но его объем должен равняться объему последнего ордера. Собственно, как прописать именно это условие: объем равен (или больше) объема последнего открытого ордера?
Тебе нужно думать не над тем как прописать, а над тем как зафиксировать лот или тикет последнего ордера.
В таких случаях я использую переменную глобального уровня и присваиваю ей тикет при открытии ордера. Возможны варианты... или 1 переменная или 2, для ордеров Buy и Sell отдельно.
А можно и всю информацию об ордере загнать в массив и при открытии нового ордера этот массив заполняется новыми данными.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (26.10.2013)
Старый 27.10.2013, 12:45   #1874 (permalink)
Местный знаток
 
Аватар для oleg777
 
Регистрация: 17.01.2010
Сообщений: 516
Репутация: 523
oleg777 - oleg777 - oleg777 - oleg777 - oleg777 - oleg777 -
Сказал(а) спасибо: 41
Поблагодарили 525 раз(а) в 154 сообщениях
Поинты: 2

Скрытый текст

//+------------------------------------------------------------------+
//| Martin TestNapisanie.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| _http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

extern double Lots = 0.1;
extern int TakeProfit =50;
extern int Step =30;
extern double Multiplier = 2;
extern int Magic =123;
extern int Slippage =5;
extern int ticket; // для модификации ордера
double price, TP, lastlot; // цена, тейк профит

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits == 3 || Digits== 5) // для перевода с 4 х знаков на 5,
TakeProfit*=10; //умножаем тейк профит и степ на 10
Step*=10;
Slippage*=10;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (CountTrades() == 0)
{
double ima = iMA(Symbol(), 0, 30, 0, MODE_SMA, PRICE_CLOSE, 1); // нажав ф1 мы уувидим какие парметры нужно указать для мовен еверидж
if (Ask> ima)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера
if (ticket > 0) // если тикет больше 0 то открываем ордер ( проверка)
{
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits); // определяем тейк профит
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); // модифицируем ордер,OrderOpenPrice - рыночный ордер нt тложенный

}

}
else if(Bid < ima)

{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red); // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера
if (ticket > 0)
// если тикет больше 0 то открываем ордер ( проверка)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); // определяем тейк профит
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}

}

}
else
{
int order_type = FindLastOrderType(); // определяем какой у нас ордер бай или селл и не нужна ли ему доливка
if (order_type == OP_BUY) // нужно ли усреднение для бая
{
price = FindLastPrice(OP_BUY) // находим последнюю цену на покупку
if(Ask <= price - Step * Point)
{
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2)
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // увеличваем следующий ордер
if(ticket>0)
ModifyOrders(OP_BUY);

}
}
else if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL) // находим последнюю цену на ппродажу
if(Bid <= price + Step * Point)
{
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble(lastlot * Multiplier, 2)
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Red); // увеличваем следующий ордер
if(ticket>0)
ModifyOrders(OP_SELL);

}


}
}
return(0);
}
//+------------------------------------------------------------------+
void ModifyOrders(int otype) // модифицируем тейк профит если более 1 сделки
{
double avgprice = 0,
oreder_lots = 0;
price = 0;
for(int i=OrdersTotal-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();

oreder_lots = OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);

if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit * Point, Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit * Point, Digits);
for(i= OrdersTotal()-1; i>=0, i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)

OrderModify( OrderTicket(), OrderOpenPrice(), 0, TP, 0);

}
}
}
//+------------------------------------------------------------------+
double FindLastLots(int otype) //определяем на сколько нужно увеличить следующий лот
{
double oldlots;
int oldticket;
ticket = 0;
for( int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}

}

}

}
return(oldlots);
}

//+------------------------------------------------------------------+
double FindLastPrice(int otype) // ищем последний ордер, чтобы от него усреднится по номеру последнего тикета
{
double oldopenprice;
int oldticket;
ticket = 0;
for (int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}

}

}

}
return(oldopenprice);
}


//+------------------------------------------------------------------+
int FindLastOrderType() // прописываем саму функцию FindLastOrderType();

{
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
return(OrderType());


}
}
return(-1);
}






//+------------------------------------------------------------------+

int CountTrades()
{
int count = 0; // пока ордеров у нас нет, значит =0
for ( int i=OrdersTotal()-1; i>=0; i--) //открывыем цикл (for)и начинаем перебирать ордера
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // нажав ф1 можно посмотреть что значит селект ордерс
{
if(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic) // проверяем наш ли этот ордер и по нашей ли паре и магику
count++; // если ордер наш то мы его будем увеличивать на единицу
}

}
return(count); // в конце возвращаем переменную( количество ордеров)

}
//+------------------------------------------------------------------+
[свернуть]

Помогите найти ошибку, сам не могу раздуплится(

Последний раз редактировалось NSerega; 27.10.2013 в 15:58.
oleg777 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.10.2013, 13:22   #1875 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от oleg777 Посмотреть сообщение
...
Помогите найти ошибку, сам не могу раздуплится(
1) В php код засунь код програмы.
2) В спойлер потом.
3) Поконкретней про ошибку. Что пишет и т.д.
4) Ещё лучше файл прикрепить.

Последний раз редактировалось eevviill; 27.10.2013 в 13:23. Причина: 4
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.10.2013, 13:25   #1876 (permalink)
Местный знаток
 
Аватар для oleg777
 
Регистрация: 17.01.2010
Сообщений: 516
Репутация: 523
oleg777 - oleg777 - oleg777 - oleg777 - oleg777 - oleg777 -
Сказал(а) спасибо: 41
Поблагодарили 525 раз(а) в 154 сообщениях
Поинты: 2

По умолчанию проба пера


Вот сова, посмтри пожалуйста, что -то в коде с лотами кажется. Сова обычный мартин.
Вложения:
Тип файла: mq4 Martin TestNapisanie.mq4 (7.8 Кб, 7 просмотров)
oleg777 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.10.2013, 14:01   #1877 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от oleg777 Посмотреть сообщение
Вот сова, посмтри пожалуйста, что -то в коде с лотами кажется. Сова обычный мартин.

Скрытый текст

PHP код:
//+------------------------------------------------------------------+
//|                                         Martin TestNapisanie.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double Lots        0.1;
extern int TakeProfit     =50;
extern int Step           =30;
extern double Multiplier  2;
extern int Magic          =123;
extern int Slippage       =5;
extern int ticket;                       // для модификации ордера
double priceTPlastlot;                        // цена, тейк профит

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
if(
Digits == || Digits== 5)  // для перевода с 4 х знаков на 5,
TakeProfit*=10;                //умножаем тейк профит и степ на 10
Step*=10;
Slippage*=10;
   return(
0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {

   return(
0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if (
CountTrades() == 0)
   {
   
double ima iMA(Symbol(), 0300,  MODE_SMAPRICE_CLOSE1); // нажав ф1 мы уувидим какие парметры нужно указать для мовен еверидж
   
if (Askima)
{
  
ticket OrderSend(Symbol(), OP_BUYLotsAskSlippage00""Magic0Blue);      // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера 
  
if (ticket 0)                                                                 // если тикет больше 0 то открываем ордер ( проверка)
   
{
    
TP NormalizeDouble(Ask TakeProfit PointDigits);                                             // определяем тейк профит
    
OrderModify(ticketOrderOpenPrice(), 0TP0);                                                     // модифицируем ордер,OrderOpenPrice - рыночный ордер нt тложенный  
                       
    
}

     }
     else if(
Bid ima)
     
     {
  
ticket OrderSend(Symbol(), OP_SELLLotsBidSlippage00""Magic0Red);      // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера 
  
if (ticket 0)  
                                                                 
// если тикет больше 0 то открываем ордер ( проверка)
   
{
    
TP NormalizeDouble(Bid TakeProfit PointDigits);                                             // определяем тейк профит
    
OrderModify(ticketOrderOpenPrice(), 0TP0); 
    }
    
    }
    
   }
   else
   {
   
int order_type FindLastOrderType();                                // определяем какой у нас ордер бай или селл и не нужна ли ему доливка
   
if (order_type == OP_BUY)                                             // нужно ли усреднение для бая
   
{
   
price FindLastPrice(OP_BUY);                     // находим последнюю цену на покупку
   
if(Ask <= price Step Point)
   {
   
lastlot FindLastLots(OP_BUY);
   
lastlot NormalizeDouble(lastlot Multiplier2);
   
ticket OrderSend(Symbol(), OP_BUYlastlotAskSlippage00""Magic0Blue); // увеличваем следующий ордер
  
if(ticket>0)
  
ModifyOrders(OP_BUY);
   
   }
   
   }
      else if (
order_type == OP_SELL)
   {
    
price FindLastPrice(OP_SELL);                     // находим последнюю цену на ппродажу
   
if(Bid <= price Step Point)
   {
   
lastlot FindLastLots(OP_SELL);
   
lastlot NormalizeDouble(lastlot Multiplier2);
   
ticket OrderSend(Symbol(), OP_SELLlastlotBidSlippage00""Magic0Red); // увеличваем следующий ордер
  
if(ticket>0)
  
ModifyOrders(OP_SELL);
   
   }
   
   
   }
   }
   return(
0);
  }
//+------------------------------------------------------------------+
void ModifyOrders(int otype)             // модифицируем тейк профит если более 1 сделки
{
double avgprice 0,
       
oreder_lots 0;
price 0;
for(
int i=OrdersTotal()-1i>=0i--)
{
  if (
OrderSelect(iSELECT_BY_POSMODE_TRADES))
    {
      if(
OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
      {
        
price += OrderOpenPrice() * OrderLots();
        
         
oreder_lots OrderLots();
      }
     }
   }
     
avgprice NormalizeDouble(price oreder_lotsDigits);
     
      if (
otype == OP_BUYTP NormalizeDouble(avgprice TakeProfit PointDigits);
       if (
otype == OP_SELLTP NormalizeDouble(avgprice TakeProfit PointDigits);
        for(
iOrdersTotal()-1i>=0i--)
     {
        if (
OrderSelect(iSELECT_BY_POSMODE_TRADES))
       {
          if(
OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
     
           
OrderModifyOrderTicket(), OrderOpenPrice(), 0TP0);
         
       }
     }
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)                //определяем на сколько нужно увеличить следующий лот
{
double oldlots;
int oldticket;
ticket 0;
for( 
int i OrdersTotal()-1i>=0i--)
{
if (
OrderSelect(iSELECT_BY_POSMODE_TRADES))
{
if (
OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket OrderTicket();
if(
oldticket ticket)
{
oldlots OrderLots();
ticket oldticket;
}

}

}

}
return(
oldlots);
}

//+------------------------------------------------------------------+
double FindLastPrice(int otype)                          // ищем последний ордер, чтобы от него усреднится по номеру последнего тикета
{
double oldopenprice;
int oldticket;
ticket 0;
for (
int i OrdersTotal()-1i>=0i--)
{
if(
OrderSelect(iSELECT_BY_POSMODE_TRADES))
{
if (
OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket OrderTicket();
if (
oldticket ticket)
{
oldopenprice OrderOpenPrice();
ticket oldticket;
}

}

}

}
return(
oldopenprice);
}


//+------------------------------------------------------------------+
 
int FindLastOrderType()                                                // прописываем саму функцию FindLastOrderType();    
 
  
{
  for (
int i OrdersTotal()-1i>=0i--)
  {
  if (
OrderSelect(iSELECT_BY_POSMODE_TRADES))
  {
  
  if (
OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
  return(
OrderType());
  
  
  }
  }
return(-
1);
}






//+------------------------------------------------------------------+

 
int CountTrades()
 {
 
int count 0;                                               // пока ордеров у нас нет, значит =0
 
for ( int i=OrdersTotal()-1i>=0i--)                      //открывыем цикл (for)и начинаем перебирать ордера 
 
{
 if(
OrderSelect(iSELECT_BY_POSMODE_TRADES))               // нажав ф1 можно посмотреть что значит селект ордерс
 
{
 if(
OrderSymbol()== Symbol() && OrderMagicNumber() == Magic)  // проверяем наш ли этот ордер и по нашей ли паре и магику
 
count++;                                                     // если ордер наш то мы его будем увеличивать на единицу
    
}
                                                      
 }        
 return(
count);                                             // в конце возвращаем переменную( количество ордеров)
 
 
}
 
//+------------------------------------------------------------------+ 
[свернуть]
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
oleg777 (27.10.2013)
Старый 28.10.2013, 13:15   #1878 (permalink)
Новичок форума
 
Аватар для Andy200577
 
Регистрация: 20.06.2012
Сообщений: 57
Репутация: 9
Andy200577
Сказал(а) спасибо: 3
Поблагодарили 8 раз(а) в 6 сообщениях
Поинты: 90
Уважаемые знатоки!
Хочу спросить такой вопрос.
Один и тот же советник работает на разных парах, можно ли как-то организовать обмен данными между совами на разных парах? В частности, если например один сов открыл ордер, то другой (если на другой паре тоже поступил сигнал) не открывает ордеров? А также вопрос, в какой последовательности на МТ4 идет обработка работы советников? Т.е. если предположим по закрытию бара поступил сигнал на обеих парах, то какой сигнал будет использован первым?
Спасибо.
Andy200577 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 28.10.2013, 13:22   #1879 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Andy200577 Посмотреть сообщение
Уважаемые знатоки!
Хочу спросить такой вопрос.
Один и тот же советник работает на разных парах, можно ли как-то организовать обмен данными между совами на разных парах? В частности, если например один сов открыл ордер, то другой (если на другой паре тоже поступил сигнал) не открывает ордеров? А также вопрос, в какой последовательности на МТ4 идет обработка работы советников? Т.е. если предположим по закрытию бара поступил сигнал на обеих парах, то какой сигнал будет использован первым?
Спасибо.
Лучше всё в одном советнике написать.
Первым обработается та пара(сов) на которую первым пришел тик.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 28.10.2013, 14:31   #1880 (permalink)
Новичок форума
 
Аватар для Andy200577
 
Регистрация: 20.06.2012
Сообщений: 57
Репутация: 9
Andy200577
Сказал(а) спасибо: 3
Поблагодарили 8 раз(а) в 6 сообщениях
Поинты: 90
Сообщение от eevviill Посмотреть сообщение
Лучше всё в одном советнике написать.
Первым обработается та пара(сов) на которую первым пришел тик.
Я так тоже хотел сначала сделать, но дело всё в том, что советник читает данные с одного индюка, который обращается к определённому сайту. И к сожалению, чтение данных другой пары с пары, на которой установлен советник происходит с постоянной ошибкой "unknown subwindow number -1 for ObjectCreate function". Но зато пару на которой он установлен, читает нормально. Получается, что выход только один, ставить сова на разные пары, с которых будут собираться данные и уже на основе этих данных принимается решение об открытии ордеров. Вот поэтому и задал этот вопрос.
Andy200577 вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 06:06. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO