[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 234

 
sergeev:

попробовал. не завис.


выдал 129 ошибку на OrderClose

Поставил перед ней RefreshRates.

Закрыл без ошибки


Да, я сделал тоже самое, но иногда он просто престает работать (причем не сам терминал, а советник)

 
doon:
Объясните пожалуйста, почему данный код иногда застывает на одном месте, и чтобы возобновить его приходиться перезагружать терминал?


Вас довольно прямо спросили - На какой строке застывает?

Ваш код совершает открытие и тут же закрытие этого же ордера и очень хорошо задокументирован, так что в Алертах сразу должно быть видно до какой строки дошел код. Или это только часть кода?

 
Roger:


Вас довольно прямо спросили - На какой строке застывает?

Ваш код совершает открытие и тут же закрытие этого же ордера и очень хорошо задокументирован, так что в Алертах сразу должно быть видно до какой строки дошел код. Или это только часть кода?


Нет, это весь код. А останавливается он на строчках открытия и закрытия ордера (но не всегда).

 
Замените ask и bid в коде на MarketInfo(Symbol(),MODE_ASK) и MarketInfo(Symbol(),MODE_BID), должно сработать
 

С этого:

OrderSend(Symbol (), OP_BUY, 1, Ask, 10,0,0, "dsgdsf", 0, 0, CLR_NONE);

на это:

OrderSend(Symbol (), OP_BUY, 1, MarketInfo(Symbol(),MODE_ASK), 10,0,0, "dsgdsf", 0, 0, CLR_NONE);
?
 

Нет, все равно отключается.

После 4 минут зависания оказалось, что это была 128 ошибка (Истек срок ожидания совершения сделки).

Может это поможет?

 

Уважаемые коллеги, в плане MQL-программирования я ещё полный "чайник", начал изучать эту тему совсем недавно. Но уже начал писать свой первый советник, по крайней мере, пытаться.

На 182-й странице данного топика я изложил торговые критерии, по которым должен торговать этот советник. Пожалуйста, посмотрите, что там написано (последний пост на странице). Я уже недели три бьюсь и никак не могу написать тут часть кода, которая отвечает за торговые критерии. Главу в учебнике, посвященную этой теме я читал, но в данном конкретном случае мне это не помогло.

За то время, что я сражаюсь с программированием, я уже успел написать несколько десятков различных вариантов этой части кода но, увы, ни одна не работает как надо. Понятное дело, знаний-то у меня маловато, так быстро MQL не освоить. В-общем, выкладываю один из вариантов кода, который хотя бы приблизительно торгует, так как надо.

//+-------------------------------------------------------------------------------------+
//| Расчет значений технических индикаторов с формированием сигналов для позиций        |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
 Signal = 0;
// - 1 - == Получение значений индикаторов ==============================================
 double SAR = iSAR(Symbol(), 0, SARStep, SARMaximum, 0);
 double EnvUp = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_UPPER, 1);
 double EnvDn = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_LOWER, 1);
 double StochM = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 1);
 double StochS = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 1);
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала ===========================================================
 if (SAR < Low[1])
   {
    Signal = 3;                                                          // Закрытие SELL
    if (StochM > StochS && StochM >= 80 && StochS >= 80 && High[1] >= EnvUp && SAR < Open[1])
      Signal = 1;                                                         // Открытие BUY
   }   
 
 if (SAR > High[1])
   {
    Signal = 4;                                                           // Закрытие BUY
    if (StochM < StochS && StochM <= 20 && StochS <= 20 && Low[1] <= EnvDn && SAR > Open[1])
      Signal = 2;                                                        // Открытие SELL
   }   
// - 2 - == Окончание блока =============================================================
}


Я знаю, что код весь кривой, косой, и вообще позиции bay и sell перепутаны местами. Но это единственный вариант кода, когда Стохастик и Энвелопес торгуют совместно, не игнорируя друг друга. В тоже время, сигналы Параболика почему-то вообще не учитываются при торговле. В-общем, прошу не ругать меня сильно за такое "черезжопавство", я прекрасно понимаю, что код не правильный.

Помогите мне, пожалуйста, исправить код советника. У меня хронически не получается. Уже получилось реализовать парочку стратегий попроще (Мувинги + Моментум; Мувинги + RSI), но вот с этой никак не получается. Очень прошу помочь. Перепишите, пожалуйста, неправильные строки, чтобы советник торговал по тем правилам, что я описал на 182-й странице. Очень нужно.

P.S.: Код советника полностью выкладывать не стал, поскольку я использовал готовые MQL-шаблоны.

 
doon:

Нет, все равно отключается.

После 4 минут зависания оказалось, что это была 128 ошибка (Истек срок ожидания совершения сделки).

Может это поможет?


Блин, да смените уже диллинговый центр - ну понятно же без всяких подсказок, что если торговые приказы на одном и том же коде то проходят нормально, то виснут, значит сервак дохнет. Приказ ушёл и 4 минуты не возвращался. Вы что, реально через этот сервер собрались проводить настоящие торговые операции? Да перекреститесь бы уже и несколько раз поменяли разные ДЦ. Вас кто-нибудь обучал компу? Это не печатная машинка и не игровая приставка - он знаний требует. А это учёба и кропотливый труд. Если бы Вы имели хотябы элементарное представление о коммандной строке, о способах открытия файлов и хотя бы элементарные понятия о том как работает компьютерная сеть, Вы задавали бы совсем иные вопросы и Вам с радостью помогали бы. Всё, что Вам нужно сейчас - это проавильно пропинговать сервер своего ДЦ и получив время отклика сервера сравнить его с временем отклика серверов других ДЦ. Потратив на всё это минут, сажем, 30, Вы сами поняли бы что к чему. Если бы Вы хотя бы в общих чертах попытались себе обрисовать как же происходит взаимодействие советника и сервера, то смогли бы даже средствами MQL4 измерить, насколько быстро исполняет торговые приказы сервер Вашего ДЦ.

Нет слов. Ну как можно столь безалаберно относиться к процессу своего же труда?

 

daytrader19:

Перепишите, пожалуйста, неправильные строки, чтобы советник торговал по тем правилам, что я описал на 182-й странице.

Обратите внимание.

1) для сигнала "пересечение двух линий" недостаточно условия "линия1[1]>линия2[1]". Надо "линия1[1]>линия2[1]&&линия1[2]<линия2[2]"

2) параболик надо бы сравнивать не с Open, а с High и Low, причем отметьте, вы его вычисляете на нулевом баре, а значение Open[1] берете с первого.

 
doon:

Нет, все равно отключается.

После 4 минут зависания оказалось, что это была 128 ошибка (Истек срок ожидания совершения сделки).

Может это поможет?


Такое бывает еще и при плохом Интернете, когда например торрент сильно качаешь. Но теперь уже до понедельника не проверишь.