Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
За CB:
Эй, летчик! Я сделал все, что мог, с заданиями Тима и поэтому решил начать более детально изучать твой код.
Я просмотрел твой код, пытаясь понять и исправить ошибки в нем. Мне удалось свести ошибки только к "несбалансированной скобке" для строки fnGenerateSignal(). Я не знаю, почему в этом случае говорится о дисбалансе.
Как всегда, я буду признателен за ваши мысли по поводу моего прогресса с вашим кодом! Имейте в виду, что я еще многого не понимаю, даже самых простых вещей.
См. аннотации.
Заметил следующее:
- вы объявляли функции, что ожидаете переменные, переданные им в качестве параметров, но на самом деле не передавали их при вызове функции - поэтому я попросил вас просто перенести переменные в верхний блок, чтобы они были доступны всем вашим функциям - давайте пока будем действовать так просто, как это возможно
- вы, кажется, думаете, что должны объявить имя вашей функции как переменную. Вот как использовать функции, передавать переменные в них и из них:
Объявить:
int abcdef(int x, string s) //значит, функция с именем abcdef принимает на вход целое число и строку и возвращает на выходе целое число (в данном случае либо 0, либо 9)
{
функция делает что-то с x и s
if (некоторое условие)
return(9);
else
return(0);
}
И вызвать:
...
myResponse = abcdef(myInteger, myString);
if (myResponse == 9)
{
бла
Привет, CB,
Спасибо. Это та часть, которую я не мог понять, а ты мне все разъяснил. Думаю, теперь я на верном пути.
CB, вопрос1:
bool fnOrderDuplicate()
{
iDuplicateOrders=0 // CB разве iDuplicateOrders не должен быть объявлен как int или double?
iOrders = OrdersTotal()-1 // Теперь с вашей помощью я понимаю, что это вызывает функцию OrdersTotal. но опять же не следует ли объявить iOrders как переменную?
CB, вопрос2:
int fnTrade() //Почему это не "int fnTrade(string sSignal)", ведь в функции мы используем sSignal. ?
{ if(sSignal=="OP_BUY")
...
CB, вопрос 3:
Вы попросили меня убрать return(0) и } в конце кода. но это будет означать, что Start() не закрывается типичным "return(0) и скобки не закрываются, так как все предваряющие скобки (из того, что я проверил) предназначены для открытия и закрытия конкретных функций, которые мы разработали. ?
Привет, CB,
Спасибо. Это та часть, которую я не мог понять, а вы мне все разъяснили. Думаю, теперь я на правильном пути.
CB, вопрос1:
bool fnOrderDuplicate()
{
iDuplicateOrders=0 // CB разве iDuplicateOrders не должен быть объявлен как int или double?
iOrders = OrdersTotal()-1 // Теперь с вашей помощью я понимаю, что это вызывает функцию OrdersTotal. но опять же не следует ли объявить iOrders как переменную?
CB, вопрос2:
int fnTrade() //Почему это не "int fnTrade(string sSignal)", ведь в функции мы используем sSignal. ?
{ if(sSignal=="OP_BUY")
...
CB, вопрос 3:
Вы попросили меня убрать return(0) и } в конце кода. но это будет означать, что Start() не закрывается типичным "return(0) и скобки не закрываются, так как все предваряющие скобки (из того, что я проверил) предназначены для открытия и закрытия конкретных функций, которые мы разработали. ?
Q1: Обе эти переменные АРЕ определены. Посмотрите на переменные, которые я предложил вам перенести в раздел, где вы определили свои экстерны. Это автоматически сделает их доступными для всех функций.
Q2: Переменная sSignal, если она объявлена вне всех функций, доступна всем функциям без необходимости явно передавать ее в вызове функции.
Q3: А - теперь я понял ваше недопонимание. Интересно, зачем вы поместили туда оператор возврата и фигурную скобку. Об этом позаботился мой комментарий по поводу оператора fnTrade(). Вы заметите, что я попросил вас добавить туда оператор возврата и закрывающую скобку. Причина в том, что вы (ошибочно) объявляли все свои функции в кодовом блоке функции start().
CB
Привет, Тим,
Я сделал все, что вы просили сделать для кода. Спасибо за подробные ответы на мои вопросы и за то, что написали много комментариев по всему коду, чтобы помочь мне разобраться в этом. Я начинаю понимать, как все соединяется, как правильно использовать массивы и вызывать определенные функции (а также роль глобальных и локальных переменных).
Я приложил последнюю версию нашего кода.
Один вопрос, есть ли какая-то причина, почему мы не сделали функцию EntryRules, содержащую все (включая флаги), чтобы дать нам условие покупки/сокращения, но вместо этого мы обращаемся к ней с флагами позже, чтобы принять решение о входе?
Привет, Ник
Я привел в порядок некоторые вещи в коде и, надеюсь, ответил на ваши вопросы. Функция EntryFunction теперь завершена. Вам просто нужно вызвать ее из начальной (главной) функции, как я указал в коде, и передать ей необходимые параметры, как показано на рисунке. Надеюсь, это займет всего несколько минут, а затем вы сможете приступить к компиляции и тестированию. Я ожидаю, что вам придется столкнуться с несколькими небольшими ошибками, но, надеюсь, ничего серьезного.
После компиляции попробуйте запустить советник в тестере и посмотрите в лог-файле, делает ли он то, что вы ожидаете от него на данном этапе. Вы должны увидеть сигналы BUY и SELL для каждой из валютных пар.
На данном этапе я бы сказал, что ваш код завершен примерно на 75%.
Следующим шагом после этого будет написание еще одной функции для проверки открытых ордеров для данной валютной пары и направления торговли.
Я бы посоветовал заглянуть в документацию MT4 в раздел Торговые функции. OrdersTotal(), OrderSelect(), Order Symbol() & OrderType() выглядят вероятными кандидатами для этой задачи.
Что касается вашего вопроса о том, чтобы функция EntryRules содержала все, включая флаги, я не вижу причин, почему бы и нет. Почему бы вам не попробовать модифицировать функцию EntryRules.
Я предлагаю вам сделать это после того, как вы скомпилируете, запустите и протестируете то, что вы уже сделали.
С уважением,
Тим
CB: Спасибо, это помогло мне прояснить ситуацию. По какой-то причине я думал, что все должно быть внутри функции запуска.
Вопрос: Разве мы не должны объявлять ema в функции start, поскольку мы хотим, чтобы они рассчитывались/обновлялись с каждым тиком?
Привет, Тим: Еще раз спасибо за помощь. Я приступлю к работе со своей стороны, как только уйду с работы сегодня вечером. Работая с вами и CB, я теперь имею больше идей о том, как собрать все вместе, и начинаю думать более гибко обо всем этом.
CB: Спасибо, это помогло мне прояснить ситуацию. По какой-то причине я думал, что все должно быть внутри функции запуска.
Вопрос: Разве мы не должны объявлять ema's в функции start, поскольку мы хотим, чтобы они рассчитывались/обновлялись с каждым тиком?
Нет. Если вы объявляете переменную внутри функции, она доступна только в этой функции. Если вы объявите ее вне всех функций, она будет доступна всем функциям. Поэтому вы можете объявить переменные ema в верхней части и затем выполнять математические операции с ними в функции start.
CB
Нет. Если вы объявляете переменную внутри функции, она доступна только в этой функции. Если вы объявляете ее вне всех функций, она доступна всем функциям. Поэтому вы можете объявить переменные ema в верхней части и затем выполнять математические операции с ними в функции start.
CB
Спасибо, CB, теперь я понял!
Привет, Тим,
Я вернулся из Турции. У меня было потрясающее время в Кушадасах, и мне очень не хотелось уезжать. Турецкие люди намного дружелюбнее британцев. Я чувствовал себя там как дома, хотя никогда не был там раньше.
Последние 5 часов или около того я потратил на обновление кода, который мы разрабатываем. Я прилагаю его.
Ключевыми поправками были:
1. Я создал функцию подсчета заказов и вызвал ее в функции start. Я ожидаю, что это будет полно ошибок, так как есть части, которые я все еще не понимаю (например: как убедиться, что она следует за циклом [c], чтобы она работала только для одной валютной пары).
2. Я попытался исправить код в отношении названия currencySymbol против currencySym, так как мы изменили название на полпути. Но это могло привести к путанице.
3. Я вызвал функцию EntryRules внутри функции start.
Я буду очень признателен, если вы исправите большие и маленькие ошибки, если вы продолжите вводить //почему старый код неправильный, комментарии, это поможет мне исправить мое логическое мышление.
Как всегда с нетерпением жду ваших поправок!
Привет, CB,
Я думаю, что Тим сейчас в отпуске, так как я не получал от него никаких известий в течение нескольких дней. Поэтому я продолжаю работать с вашим кодом, так как он поможет мне в торговле (так как сейчас я торгую стратегией вручную, а это значит просыпаться рано утром и т.д.). Я изменил весь код, как вы просили, но по какой-то причине он по-прежнему возвращает ошибку (на этот раз из-за "==", очень странно).
Еще одна вещь - я заметил, что функция start не закрыта. Поэтому я добавил "}" после первой функции в начале (), если этого не сделать, код выдает ошибку с последующей строкой функции fnGenerateSignal() (мол, определение функции для этого неожиданно).
Спасибо, как всегда. С нетерпением жду ваших комментариев/поправок!
Ник