Как кодировать? - страница 308

 

Здравствуйте, Младен,

Я наткнулся на код, сделанный вами на стохастике. Однако, когда я вставляю его в свою систему, ничего не происходит. Могу ли я уточнить у вас, что он делает?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

С уважением,

Терранс

 

...

Попробуйте некоторые из них, размещенные здесь: https: //www.mql5.com/en/forum/175297/page3

Или здесь: https: //www.mql5.com/en/forum/177239/page2

Проверено и они работают

tkuan77:
Привет, Младен,

Я наткнулся на код, сделанный вами на стохастике. Однако, когда я вставляю его в свои системы, ничего не происходит. Могу ли я уточнить у вас, что он делает?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

С уважением,

Терранс
 

Это странно.

Я изучил проблему с замком немного подробнее. Очевидно, это связано с настройками UAC (User Account Control), поэтому я зашел в панель управления windows7 и полностью отключил UAC. После перезагрузки я заметил, что замок исчез из файла. Я открыл его, и он оказался таким же, как и файл, который я разместил на этом форуме. Он полностью отличается от кода, который я писал последние несколько недель, хотя это тот же самый файл. Я подумал, что потерял всю свою работу по кодированию. Я снова включил UAC и перезагрузился, замок вернулся, и код, который я написал, снова стал нормальным.

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

Я думаю, мне нужно будет открыть новый советник и вручную ввести весь этот код и сохранить его.

 

...

Это обычная проблема windows 7 (с ее защитой).

Самый простой способ избежать этого в windows 7 - установить metatrader на раздел, отличный от C, и у вас не будет подобных проблем.

crsnape@btinternet.com:
Это странно.

Я изучил проблему с замком немного подробнее. Оказалось, что это связано с настройками UAC (User Account Control), поэтому я зашел в панель управления windows7 и полностью отключил UAC. После перезагрузки я заметил, что замок исчез из файла. Я открыл его, и он оказался таким же, как и файл, который я разместил на этом форуме. Он полностью отличается от кода, который я писал последние несколько недель, хотя это тот же самый файл. Я подумал, что потерял всю свою работу по кодированию. Я снова включил UAC и перезагрузился, замок вернулся, и код, который я написал, снова стал нормальным.

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

Я думаю, мне нужно будет открыть новый советник и вручную ввести весь этот код и сохранить его.
 

Наконец-то я добился нормального рабочего советника. Он работает точно так, как должен - в итоге я скопировал свой код в блокнот, отключил UAC, а затем вставил его в новый файл советника. И я понял, почему мои функции не работают - я поместил переменную int внутрь нормализованного двойника. Я не знал, что не могу этого сделать, но теперь знаю - мне понадобилась всего неделя, чтобы понять это! :/

В общем, я написал следующее:

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort);

if (VariableRisk == false) Risk = StaticRisk;

И я подумал, можно ли сократить это следующим образом?

if (VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort);

else Risk = StaticRisk;

}

А также я написал следующее:

//--- Функция для расчета тейк-профита позиции при длинной позиции

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

if (AutoCalcTakeProfit == true)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Позиция с тейк-профитом рассчитана успешно");

return((TPPriceLong);

}

if (AutoCalcTakeProfit == false)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Позиция статического тейк-профита рассчитана успешно");

return (TPPriceLong);

}

}

И мне интересно, можно ли сократить это следующим образом?

//--- Функция для вычисления позиции тейк-профита при длинной позиции

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

RefreshRates();

if (AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Позиция тейк-профита рассчитана успешно");

else TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Позиция статического тейк-профита рассчитана успешно");

return (TPPriceLong);

}

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

extern int SignalChart = PERIOD_D1;

extern int TriggerChart = PERIOD_H4;

А затем сослаться на нее, сделав, например, следующее:

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

 

Об этой части :

А затем сослаться на него, сделав, например, следующее: SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Да, это 100% правильный способ его использования (даже с учетом того, что вы используете закрытый бар (shift в этом примере установлен на 1) и что, используя закрытый бар в тестировании, вы избежите обычной ловушки использования открытого бара в мультитаймфрейминге).

crsnape@btinternet.com:
Наконец-то у меня получился нормально работающий советник. Он работает точно так, как должен - я скопировал свой код в блокнот, отключил UAC, а затем вставил его в новый файл советника. И я понял, почему мои функции не работают - я поместил переменную int в нормализованный double. Я не знал, что не могу этого сделать, но теперь знаю - мне понадобилась всего неделя, чтобы понять это! :/

В общем, я написал следующее:

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort);

if (VariableRisk == false) Risk = StaticRisk;

И я подумал, можно ли сократить это следующим образом?

if (VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort);

else Risk = StaticRisk;

}

А также я написал следующее:

//--- Функция для расчета тейк-профита позиции при длинной позиции

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

if (AutoCalcTakeProfit == true)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Позиция с тейк-профитом рассчитана успешно");

return((TPPriceLong);

}

if (AutoCalcTakeProfit == false)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Позиция статического тейк-профита рассчитана успешно");

return (TPPriceLong);

}

}

И мне интересно, можно ли сократить это следующим образом?

//--- Функция для вычисления позиции тейк-профита при длинной позиции

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

RefreshRates();

if (AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Позиция тейк-профита рассчитана успешно");

else TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Позиция статического тейк-профита рассчитана успешно");

return (TPPriceLong);

}

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

extern int SignalChart = PERIOD_D1;

extern int TriggerChart = PERIOD_H4;

А затем сослаться на него, сделав, например, следующее:

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
 

Здравствуйте, я получаю код ошибки 4059:

[TD]Функция не разрешена в режиме тестирования.

ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD].

4059

Я поискал, но не могу найти никакой дополнительной информации о том, что это значит?

 

Не могли бы вы помочь добавить следующие коды к этому индикатору parabolic sar?

Pip:
Спасибо Младен,

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

Спасибо, приятель.

Спасибо,

Пип

Дорогой друг,

Не могли бы вы помочь добавить следующие коды к этому PARABOLIC SAR alert parabolic_alert_mod.mq4INDICATOR?

Я не ищу советника. Если возможно, добавьте хотя бы опцию SHIFT в индикатор.

extern double TakeProfit = 50;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double SAR_Step = 0.02;

extern double SAR_Maximum = 0.2;

extern double Shift = 1;

Файлы:
 

...

joelnelson

TakeProfit, Lots и TrailingStop не имеют никакого отношения к тому, как рассчитывается параболический sar (эти параметры, очевидно, взяты из советника, использующего sar в своей работе). Поэтому, если вы не ищете советника, то добавить эти параметры не представляется возможным.

Также сдвиг в параметрах относится к бару, который тестируется (параболический SAR не сдвигается, как обычно сдвигается скользящая средняя) Эти параметры, вероятно, предназначены для вызова встроенного sar, а встроенный sar имеет следующий вид

double iSAR([/TD] [TD]string symbol, int timeframe, double step, double maximum, int shift)

Сдвиг 1 в этом случае означает проверку значения первого закрытого бара параболического сара.

joelnelson:
Дорогой друг,

МОЖЕТЕ ЛИ ВЫ ПОМОЧЬ ДОБАВИТЬ СЛЕДУЮЩИЕ КОДЫ К ЭТОМУ ПАРАБОЛИЧЕСКОМУ SAR алерту parabolic_alert_mod.mq4INDICATOR?

Я не ищу советника. Если возможно, добавьте хотя бы опцию SHIFT в индикатор.

extern double TakeProfit = 50;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double SAR_Step = 0.02;

extern double SAR_Maximum = 0.2;

extern double Shift=1;
 

...

Эта ошибка может быть возвращена некоторыми функциями.

Функции, которые могут вызвать эту ошибку при тестировании, следующие :

MarketInfo

MessageBox

SendFTP

SendMail

WindowIsVisible

WindowFind

WindowHandle

Итак, вызов некоторых из вышеперечисленных функций вызвал эту ошибку

crsnape@btinternet.com:
Здравствуйте, я получаю код ошибки 4059:[TD]Функция не разрешена в режиме тестирования.
ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD]4059
Я сделал поиск, но не могу найти никакой дополнительной информации о том, что это значит?
Причина обращения: