Спрашивайте! - страница 142

 

Помогите, пожалуйста, с советником

Я пытаюсь закрыть ордер на продажу и открыть новый ордер на покупку. Ордер на покупку открывается, но ордер на продажу выдает ошибку 4051.

Я использую

ticket = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Gold);// закрытие позиции

и

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

 

Как изменить магическое число?

Привет всем,

Я использую разностный советник (копия советника одного происхождения) для торговли разностными парами в окне разностного графика и я хотел бы изменить магическое число, но не знаю, как работает магическое число? Не могли бы вы мне рассказать:

1. Как работает магическое число?

2. Как изменить магическое число?

3. Могу ли я взять любое число для изменения магического числа или я ДОЛЖЕН использовать какое-то число в определенных правилах?

4. Не могли бы вы привести пример изменения магического числа на магическом числе моего советника: 16763?

Большое спасибо за помощь!

 

Магический номер - это не что иное, как уникальный идентификатор. Он отличает каждый экземпляр одного и того же советника, а также отличает его от любого другого советника, который у вас может быть запущен.

Если магический номер является внешней переменной, просто измените его на любое число, которое вам нужно. Просто убедитесь, что это не то же самое число, что и у любого другого запущенного советника.

Если это не внешняя переменная, найдите ее в коде и измените на любое число.

Надеюсь, это поможет.

Lux

 
luxinterior:
Магический номер - это не что иное, как уникальный идентификатор. Он отличает каждый экземпляр одного и того же советника, а также отличает его от любого другого советника, который у вас может быть запущен.

Если магическое число является внешней переменной, просто измените его на любое нужное вам число. Только убедитесь, что это не то же самое число, что и у любого другого работающего советника.

Если это не внешняя переменная, найдите ее в коде и измените на любое нужное вам число.

Надеюсь, это поможет.

Lux

Привет, Лакс,

Вы имеете в виду, что я могу изменить магическое число моего советника: 16763 на 16764, 16765 и т.д.?

Спасибо за быстрый ответ.

Luu

 
luu:
Привет, Лакс,

Вы имеете в виду, что я могу изменить магическое число моего советника: 16763 на 16764, 16765 и т.д.?

Спасибо за быстрый ответ.

Luu

Именно так! До тех пор, пока номер уникален, не имеет значения, какой номер вы выберете.

Вам не нужно менять его, если у вас нет особых причин для этого.

Лакс

 
luxinterior:
Именно! Пока номер уникален, не имеет значения, какой номер вы выберете.

На самом деле вам не нужно менять его, если у вас нет особых причин для этого.

Lux

Большое спасибо за помощь, Лакс!

Luu

 

Проблемы с закрытием ордеров

Друзья, у меня есть советник с индикатором поддержки и сопротивления. Советник должен закрывать ордера по целевой прибыли, но иногда этого не происходит. Как можно избавиться от этой проблемы?

 

Пожалуйста, помогите с простым общим скриптом.

Привет

Не мог бы кто-нибудь1 помочь мне, пожалуйста, с простым скриптом.

Вот что мне нужно.

Очень общий скрипт, который может быть использован на любом символе, который будет размещать 3-4 ордера для SELL_STOP и BUY_STOP.

Допустим, я хочу разместить buy_stop на 20 пунктов выше текущей цены, второй ордер на 40 пунктов выше текущей цены, третий на 80 пунктов и так далее.

То же самое для Sell_Stop

Я вроде как пытался собрать скрипт на основе некоторых примеров, но так как я не знаком с языком C, у меня возникли некоторые проблемы.

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""// improved.mq4

int start()

{

int ticket,i;

int cnt=1;

int Dist_SL =10; // Предустановленный SL (pt)

int Dist_TP =100; // Предустановленный TP (pt)

string Symb=Symbol(); // Символ

RefreshRates();

double bid =MarketInfo(Symb,MODE_BID);

double ask =MarketInfo(Symb,MODE_ASK);

double point =MarketInfo(Symb,MODE_POINT);

int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);

if (Dist_TP < Min_Dist) // Если меньше допустимого.

{

Dist_TP=Min_Dist; // Устанавливаем допустимое значение

Alert(" Увеличено расстояние TakeP = ",Dist_TP," pt");

}

//-------------------------------------------------------------------- 6 --

Alert("Запрос был отправлен на сервер. Ждем ответа...");

for(i=100;i<400;i=i+100)

{

double TP=(ask+i*Point) + Dist_TP*Point; // Запрошенная цена TP

ticket=OrderSend(Symb,OP_BUYSTOP,0.1,ask+i*Point,1,(ask+i*Point)-Dist_SL*Point,TP);

Sleep(500);

int Error=GetLastError(); // Неудача

switch(Error) // Преодолимые ошибки

{

case 130:Alert("SL неверно. Повторная попытка...");

RefreshRates(); // Обновление данных

if (Dist_SL < Min_Dist) // Если меньше допустимого значения

{

Dist_SL=Min_Dist; // Устанавливаем допустимое значение

Alert(" Увеличено расстояние SL = ",Dist_SL," pt");

}

i=i-50;

Alert (i);

Alert (Dist_SL);

cnt=cnt+1;

Alert (cnt);

if (cnt==3)break;

continue; // На следующей итерации

case 135:Alert("Цена изменилась. Повторная попытка...");

RefreshRates(); // Обновление данных

continue; // На следующей итерации

case 136:Alert("Цены нет. Ожидание нового тика...");

while(RefreshRates()==false) // До нового тика

Sleep(1); // Задержка цикла

continue; // На следующей итерации

case 146:Alert("Торговая подсистема занята. Повторная попытка...");

Sleep(500); // Простое решение

RefreshRates(); // Обновление данных

continue; // На следующей итерации

}

switch(Error) // Критические ошибки

{

case 2 : Alert("Обычная ошибка.");

break; // Выход из 'switch'

case 5 : Alert("Устаревшая версия клиентского терминала.");

break; // Exit 'switch'

case 64: Предупреждение("Счет заблокирован.");

break; // Exit 'switch'

case 133:Alert("Торговля запрещена");

break; // Exit 'switch'

default: Alert("Произошла ошибка ",Error);// Другие альтернативы

}

// break;

}

//-------------------------------------------------------------------------- 9 --

Alert("Скрипт завершил свои операции ---------------------------");

return; // Exit start()

}

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Это вроде как работает, но много раз у меня возникали проблемы со стоп-лоссом.

 

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

индикатор ssrc, это может принести дивиденды, что вы думаете? так что вместо того, чтобы это был

ssrc это будет односторонний гауссовый sr rate spearmen rank correlation

"osgsrspc" lol . (я пытался закодировать это, но это вышло у меня из головы)

ssrc_bar.mq4

ssrc.mq4

os_gaussian_sr_rate.mq4

Файлы:
 

Новый вопрос: 5-й десятичный знак и управление деньгами

На другом форуме, который я часто посещаю и который предназначен для клиентов определенного советника, один клиент жаловался на то, что разработчик советника до сих пор не исправил проблему 5-го десятичного / дробного ценообразования для своего советника.

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

И вот тут возникает вопрос. Разработчик по-прежнему настаивает на том, что эта проблема очень сложная и для ее устранения требуется специальное программирование скриптов. Вот объяснение от разработчика:

Привет, Джон. Вы правы. Все больше и больше брокеров переходят к дробным пунктам. Однако проблема дробных пунктов не является ошибкой в [имя удалено]. Это проблема с тем, как платформа MT4 определяет разницу в количестве знаков после запятой. Мы перепрограммируем советника и индикаторы так, чтобы они распознавали разницу. Предполагается, что это содержится в определении переменной "Point" в платформе MT4, и советники используют это определение для определения десятичных знаков. Однако многие платформы MT4 не передают советнику более 4 десятичных знаков, поэтому необходимо включить специальный сценарий. Наша проблема заключается в том, что мы используем переменную "Point" во всем советнике и всех индикаторах. Поэтому не так просто добавить пару строк кода, чтобы переопределить "Point". Я надеюсь, что к концу следующей недели у меня будет рабочая программа для дробных пунктов.

Поэтому мой вопрос заключается в следующем: Сталкивался ли кто-нибудь из вас, опытных программистов, с таким сложным требованием к сценарию или проблемами со значением "Point" в платформе MT4?

Даже если предположить, что "Point" ограничен 4 десятичными знаками, то это будет означать, что вам придется беспокоиться только о парах с Point = 0.001 ----, что все равно займет всего пару строк кода.

Или вы можете использовать "Digits" вместо "Point" - что по-прежнему занимает всего несколько строк кода.

Или вы можете просто использовать булеву переменную типа "UseFractionalPips = true;", чтобы переопределить "Point".

Мне действительно кажется, что разработчик либо усложняет проблему (или, возможно, имеет другие мотивы). Я просто никогда не читал и не слышал об этой проблеме с "Point", ограниченным только 4 десятичными знаками - и даже если это так, вы можете использовать "Digits" или другие методы для переопределения точки без какого-либо специального скрипта.

Я программирую в МТ4 всего 18 месяцев, поэтому я подумал, что мне стоит обратиться к более опытным программистам, чтобы узнать, насколько сложным является "исправление" для работы с ценообразованием дробных пунктов в МТ4.

Есть какие-нибудь мысли?

Заранее спасибо за помощь,

-B