Есть такая функция Print(), еще есть Comment(), Alert(). При помощи них посмотрите какие значения передаете в OrderSend().
Видимо никаких, потому что советник тупо стоит и ничего не делает в принципе! Возможно я неправильно расположил торговую функцию, либо вызов параметров функции не верен!?
Уважаемые господа!
Черезнесколько лет торговли на форексе, решил таки попробовать написать советника для последнего варианта собственной торговой системы. Начал с простого - при достижении ценой некоторого сигнального (контрольного) уровня - выставляется отложенный ордер. Код то я написал, и советник компелируется, только не работает! Буду признателен тем, кто укажет на ошибки в программе и подскажет как их исправить.
Валерий
if (PRICE_HIGH>=Level_1) { OrderSend(Symbol(),OP_SELLSTOP,0.1,Bid+iClose(0,PERIOD_W1,1),3,Ask+iClose(0,PERIOD_W1,1)+300*Point,Ask+iClose(0,PERIOD_W1,1)-300*Point); } else { if (PRICE_LOW<=Level_2) OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+iClose(0,PERIOD_W1,1),3,Bid+iClose(0,PERIOD_W1,1)-300*Point,Bid+iClose(0,PERIOD_W1,1)+300*Point); } //---- return(0); }
Если заглянуть в справочник констант
Constant | Value | Description |
---|---|---|
PRICE_CLOSE | 0 | Close price. |
PRICE_OPEN | 1 | Open price. |
PRICE_HIGH | 2 | High price. |
PRICE_LOW | 3 | Low price. |
...
мы увидим, что значение константы PRICE_HIGH = 2.
то есть, эта константа не имеет прямого отношения к значению цены High, она имеет другое назначение. К тому же, некорректно сравнивать константу с числом double - результат может оказаться непредсказуем.
Если Вы хотели использовать здесь цену High текущей свечи таймврейма, то правильней будет прибегнуть к элементу массива High[0].
Но это пол беды. Если Ваш скрипт вдруг заработает - он выставит Вам столько ордеров, что Вы будете очень удивлены :)
Уважаемые господа!
Черезнесколько лет торговли на форексе, решил таки попробовать написать советника для последнего варианта собственной торговой системы. Начал с простого - при достижении ценой некоторого сигнального (контрольного) уровня - выставляется отложенный ордер. Код то я написал, и советник компелируется, только не работает! Буду признателен тем, кто укажет на ошибки в программе и подскажет как их исправить.
Валерий
//+------------------------------------------------------------------+ //| IWR.mq4 | //| автор Дед, Тот Самый Дед! | //| http://www.metaquotes.net | //| Советник выставляет отложенные ордера по достижении определенных | //| контрольных уровней, передвигает стоп в безубыток при достижении | //| КУ выставляет на уровне безубытка по сути переворотный отложен- | //| ный ордер. //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //+-------Внешние переменные советника-------------------------------+ extern string _P_Expert = "---------- Параметры советника"; extern double KU0; extern double Lots = 0.1; extern double Level_1= 50; extern double Level_2 =- 50; //+------------------------------------------------------------------+ //| expert initialization function extern int Slippage = 3; // Проскальзывание цены extern int NumberOfTry = 5; // Количество попыток | //+------------------------------------------------------------------+ int init() { double KU0 = iClose(0,PERIOD_W1,1);// цена закрытие предыдущей недели double Level_1 = KU0 + 50; // откат от КУ0 вверх double Level_2 = KU0 - 50; // откат от КУ0 вниз //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Торговая функция | //+------------------------------------------------------------------+ OrderSend(Symbol(),OP_SELLSTOP,0.1,Bid+iClose(0,PERIOD_W1,1),3,Ask+iClose(0,PERIOD_W1,1)+300*Point,Ask+iClose(0,PERIOD_W1,1)-300*Point); OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+iClose(0,PERIOD_W1,1),3,Bid+iClose(0,PERIOD_W1,1)-300*Point,Bid+iClose(0,PERIOD_W1,1)+300*Point); //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double KU0; //Сигнальный уровень double Level_1; //Сигнальный уровень double Level_2; //Сигнальный уровень KU0 = iClose(0,PERIOD_W1,1); //Цена закрытие предыдущей недели Level_1 = KU0 + 50; //Откат цены вверх от КУ0 Level_2 = KU0 - 50; //Откат цены вниз от КУ0 double OrderSellStop=KU0*Bid; double OrderBuyStop=KU0*Ask; //---- if (PRICE_HIGH>=Level_1) { OrderSend(Symbol(),OP_SELLSTOP,0.1,Bid+iClose(0,PERIOD_W1,1),3,Ask+iClose(0,PERIOD_W1,1)+300*Point,Ask+iClose(0,PERIOD_W1,1)-300*Point); } else { if (PRICE_LOW<=Level_2) OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+iClose(0,PERIOD_W1,1),3,Bid+iClose(0,PERIOD_W1,1)-300*Point,Bid+iClose(0,PERIOD_W1,1)+300*Point); } //---- return(0); } //+------------------------------------------------------------------+ //| Пользовательская функция | //+------------------------------------------------------------------+
выделено
Видимо никаких, потому что советник тупо стоит и ничего не делает в принципе! Возможно я неправильно расположил торговую функцию, либо вызов параметров функции не верен!?
Если там где ждете ничего не происходит, надо перейти ближе к входу.
Видимо никаких, потому что советник тупо стоит и ничего не делает в принципе! Возможно я неправильно расположил торговую функцию, либо вызов параметров функции не верен!?
Напрасно, автор, Вы ленитесь проверить параметры хотя бы с помощью Print().
скорее всего советник пытается выставить ордер, но не может - и вот почему (имхо):
OrderSend(Symbol(),OP_SELLSTOP,0.1,Bid+iClose(0,PERIOD_W1,1),3,Ask+iClose(0,PERIOD_W1,1)+300*Point,Ask+iClose(0,PERIOD_W1,1)-300*Point)
Это переводится как:
"Поставь отложенный ордер Sell Stop; по текущему символу; лотом 0.1; по цене = [Цена Bid] + [Цена закрытия недели]; проскальзывание = 3;
стоп = [Цена Ask] + [Цена закрытия недели] + [300 пипс]; тейк = [Цена Ask] + [Цена закрытия недели] - [300 пипс]"
Очевидно, что появление на рынке цены = [Цена Bid] + [Цена закрытия недели] - это нереально.
логичнее было бы сказать что то в этом роде:
OrderSend(Symbol(),OP_SELLSTOP,0.1,KU0,3,Level_1,Level_2);
Уважаемые господа!
Черезнесколько лет торговли на форексе, решил таки попробовать написать советника для последнего варианта собственной торговой системы. Начал с простого - при достижении ценой некоторого сигнального (контрольного) уровня - выставляется отложенный ордер. Код то я написал, и советник компелируется, только не работает! Буду признателен тем, кто укажет на ошибки в программе и подскажет как их исправить.
Валерий
Сразу в глаза бросается ошибка в самом главном коде, это ДНК. И, боюсь, такие ошибки уже не исправить.
Сразу в глаза бросается ошибка в самом главном коде, это ДНК. И, боюсь, такие ошибки уже не исправить.
:) но все же любопытно, на каком этапе он прекратит эти попытки
скорее всего советник пытается выставить ордер, но не может - и вот почему (имхо):
Если торги идут не по индексам или серебру\золоту, то даже не пытается: значение констант PRICE_HIGH,PRICE_LOW лежат внутри диапазона +/- 50 ( 2 всегда меньше 50, а 3 всегда больше -50 +/- цена закрытия недели) ==> условия под if() не выполняются. Если по какому-то из указанных инструментов, то очевидно, что запрограммировано не то, что имел ввиду автор.
логично. хорошо бы ему еще дельту КУ на точность помножить.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые господа!
Черезнесколько лет торговли на форексе, решил таки попробовать написать советника для последнего варианта собственной торговой системы. Начал с простого - при достижении ценой некоторого сигнального (контрольного) уровня - выставляется отложенный ордер. Код то я написал, и советник компелируется, только не работает! Буду признателен тем, кто укажет на ошибки в программе и подскажет как их исправить.
Валерий