我想学习MT5终端的编程语言。 作为一个初学者,我应该从哪里开始? - 页 6 123456789 新评论 Ihor Herasko 2019.02.27 19:12 #51 Vasiliy Kolesov:从头开始学习科瓦廖夫的教科书并不方便,因为它已经过时了。你开始做一些练习,但它们没有被编译。而单纯的阅读,如果没有练习,就会使人更难记住东西。我不认为我们在谈论任何简单的例子。它可能已经在一本教科书的末尾。而这可能是一个语法问题,如果你了解基本知识,就很容易纠正。在任何情况下,TC都可以问为什么这个或那个例子不能编译。 你能举出一个教程中不能编译的例子吗?举个例子,让我们把它分解一下。 Ihor Herasko 2019.02.27 19:17 #52 Ilya Malev:建议你学习C++是正确的,因为MQL就是这样,而且关于C++的材料多得很。如果你懂C++,那就从帮助中研究MQL,解析其他人的EA。这是指如果一个人在MT以外的地方计划自己的活动。但人们无法事先计划这样的事情。现在的目标是学习为MT写作。如果一个人从C或C++开始,他就会被卡在那里,因为这些东西在MQL中一开始就没有。毕竟,即使是简单的数值打印也不能用cout来完成。在这方面,MQL要容易得多--打印 或警报。 所以最好是开始学习你需要的东西。以后,如果你喜欢它并想继续下去,你可以转到C++。 BillionerClub 2019.02.27 19:22 #53 如果你是一个初学者,可以学习C++。这里有一个很好的资源https://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-i-s 避免非专业人士,他们的语言太干涩,根本记不住东西。使用记忆术技巧,互联网上有很多关于这个主题的书籍。 就个人而言,要记住一些东西,你必须想象一个功能,例如,作为一个现实世界的对象,增加更多的亮度和幽默,性,和超现实主义。 Dmitiry Ananiev 2019.02.27 19:39 #54 multiplicator:不如 必须在PositionOpen中再输入6个参数。其他参数不需要规定 Vasiliy Kolesov 2019.02.27 19:48 #55 Ihor Herasko:这些几乎都不是什么简单的例子。它可能已经在一本教科书的末尾。而且,这可能是关于语法的问题,如果你了解基础知识,就很容易解决。在任何情况下,TC都可以问为什么这个或那个例子不能编译。 你能举出一个教程中不能编译的例子吗?让我们举一个例子。是的,从一开始,比如说没有Start函数,现在是OnInit()。 我在这里找到了一个很好的描述,如果你从头开始https://sgr-tradeinvest.ru/mql4。 Ihor Herasko 2019.02.27 20:11 #56 Vasiliy Kolesov :从一开始是的,例如没有 Start 函数,现在是OnInit()编译。没有错误。只有一个警告,通过对“功能”一词的基本理解很容易纠正。我什至举了一个稍微大一点的例子: //-------------------------------------------------------------------- // tradingexpert.mq4 // Предназначен для использования в качестве примера в учебнике MQL4. //-------------------------------------------------------------------- #property copyright "Copyright © Book, 2007" #property link "http://AutoGraf.dp.ua" //--------------------------------------------------------------- 1 -- // Численные значения для М15 extern double StopLoss = 200 ; // SL для открываемого ордера extern double TakeProfit = 39 ; // ТР для открываемого ордера extern int Period_MA_1= 11 ; // Период МА 1 extern int Period_MA_2= 31 ; // Период МА 2 extern double Rastvor = 28.0 ; // Расстояние между МА extern double Lots = 0.1 ; // Жестко заданное колич. лотов extern double Prots = 0.07 ; // Процент свободных средств bool Work= true ; // Эксперт будет работать. string Symb; // Название финанс. инструмента //--------------------------------------------------------------- 2 -- int start() { int Total, // Количество ордеров в окне Tip=- 1 , // Тип выбран. ордера (B=0,S=1) Ticket; // Номер ордера double MA_1_t, // Значен. МА_1 текущее MA_2_t, // Значен. МА_2 текущее Lot, // Колич. лотов в выбран.ордере Lts, // Колич. лотов в открыв.ордере Min_Lot, // Минимальное количество лотов Step, // Шаг изменения размера лота Free, // Текущие свободные средства One_Lot, // Стоимость одного лота Price, // Цена выбранного ордера SL, // SL выбранного ордера TP; // TP выбранного ордера bool Ans = false , // Ответ сервера после закрытия Cls_B= false , // Критерий для закрытия Buy Cls_S= false , // Критерий для закрытия Sell Opn_B= false , // Критерий для открытия Buy Opn_S= false ; // Критерий для открытия Sell //--------------------------------------------------------------- 3 -- // Предварит.обработка if ( Bars < Period_MA_2) // Недостаточно баров { Alert ( "Недостаточно баров в окне. Эксперт не работает." ); return ; // Выход из start() } if (Work== false ) // Критическая ошибка { Alert ( "Критическая ошибка. Эксперт не работает." ); return ; // Выход из start() } //--------------------------------------------------------------- 4 -- // Учёт ордеров Symb= Symbol (); // Название фин.инстр. Total= 0 ; // Количество ордеров for ( int i= 1 ; i<= OrdersTotal (); i++) // Цикл перебора ордер { if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий { // Анализ ордеров: if ( OrderSymbol ()!=Symb) continue ; // Не наш фин. инструм if ( OrderType ()> 1 ) // Попался отложенный { Alert ( "Обнаружен отложенный ордер. Эксперт не работает." ); return ; // Выход из start() } Total++; // Счётчик рыночн. орд if (Total> 1 ) // Не более одного орд { Alert ( "Несколько рыночных ордеров. Эксперт не работает." ); return ; // Выход из start() } Ticket= OrderTicket (); // Номер выбранн. орд. Tip = OrderType (); // Тип выбранного орд. Price = OrderOpenPrice (); // Цена выбранн. орд. SL = OrderStopLoss (); // SL выбранного орд. TP = OrderTakeProfit (); // TP выбранного орд. Lot = OrderLots (); // Количество лотов } } //--------------------------------------------------------------- 5 -- // Торговые критерии MA_1_t= iMA ( NULL , 0 ,Period_MA_1, 0 , MODE_LWMA , PRICE_TYPICAL , 0 ); // МА_1 MA_2_t= iMA ( NULL , 0 ,Period_MA_2, 0 , MODE_LWMA , PRICE_TYPICAL , 0 ); // МА_2 if (MA_1_t > MA_2_t + Rastvor* Point ) // Если разница между { // ..МА 1 и 2 большая Opn_B= true ; // Критерий откр. Buy Cls_S= true ; // Критерий закр. Sell } if (MA_1_t < MA_2_t - Rastvor* Point ) // Если разница между { // ..МА 1 и 2 большая Opn_S= true ; // Критерий откр. Sell Cls_B= true ; // Критерий закр. Buy } //--------------------------------------------------------------- 6 -- // Закрытие ордеров while ( true ) // Цикл закрытия орд. { if (Tip== 0 && Cls_B== true ) // Открыт ордер Buy.. { //и есть критерий закр Alert ( "Попытка закрыть Buy " ,Ticket, ". Ожидание ответа.." ); RefreshRates (); // Обновление данных Ans= OrderClose (Ticket,Lot, Bid , 2 ); // Закрытие Buy if (Ans== true ) // Получилось :) { Alert ( "Закрыт ордер Buy " ,Ticket); break ; // Выход из цикла закр } if (Fun_Error( GetLastError ())== 1 ) // Обработка ошибок continue ; // Повторная попытка return ; // Выход из start() } if (Tip== 1 && Cls_S== true ) // Открыт ордер Sell.. { // и есть критерий закр Alert ( "Попытка закрыть Sell " ,Ticket, ". Ожидание ответа.." ); RefreshRates (); // Обновление данных Ans= OrderClose (Ticket,Lot, Ask , 2 ); // Закрытие Sell if (Ans== true ) // Получилось :) { Alert ( "Закрыт ордер Sell " ,Ticket); break ; // Выход из цикла закр } if (Fun_Error( GetLastError ())== 1 ) // Обработка ошибок continue ; // Повторная попытка return ; // Выход из start() } break ; // Выход из while } //--------------------------------------------------------------- 7 -- // Стоимость ордеров RefreshRates (); // Обновление данных Min_Lot= MarketInfo (Symb, MODE_MINLOT ); // Миним. колич. лотов Free = AccountFreeMargin (); // Свободн средства MarketInfo (Symb, MODE_MARGINREQUIRED ); // Стоимость 1 лота Step = MarketInfo (Symb, MODE_LOTSTEP ); // Шаг изменен размера if (Lots > 0 ) // Если заданы лоты,то Lts =Lots; // с ними и работаем else // % свободных средств Lts= MathFloor (Free*Prots/One_Lot/Step)*Step; // Для открытия if (Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальн if (Lts*One_Lot > Free) // Лот дороже свободн. { Alert ( " Не хватает денег на " , Lts, " лотов" ); return ; // Выход из start() } //--------------------------------------------------------------- 8 -- // Открытие ордеров while ( true ) // Цикл закрытия орд. { if (Total== 0 && Opn_B== true ) // Открытых орд. нет + { // критерий откр. Buy RefreshRates (); // Обновление данных SL= Bid - New_Stop(StopLoss)* Point ; // Вычисление SL откр. TP= Bid + New_Stop(TakeProfit)* Point ; // Вычисление TP откр. Alert ( "Попытка открыть Buy. Ожидание ответа.." ); Ticket= OrderSend (Symb, OP_BUY ,Lts, Ask , 2 ,SL,TP); //Открытие Buy if (Ticket > 0 ) // Получилось :) { Alert ( "Открыт ордер Buy " ,Ticket); return ; // Выход из start() } if (Fun_Error( GetLastError ())== 1 ) // Обработка ошибок continue ; // Повторная попытка return ; // Выход из start() } if (Total== 0 && Opn_S== true ) // Открытых орд. нет + { // критерий откр. Sell RefreshRates (); // Обновление данных SL= Ask + New_Stop(StopLoss)* Point ; // Вычисление SL откр. TP= Ask - New_Stop(TakeProfit)* Point ; // Вычисление TP откр. Alert ( "Попытка открыть Sell. Ожидание ответа.." ); Ticket= OrderSend (Symb, OP_SELL ,Lts, Bid , 2 ,SL,TP); //Открытие Sel if (Ticket > 0 ) // Получилось :) { Alert ( "Открыт ордер Sell " ,Ticket); return ; // Выход из start() } if (Fun_Error( GetLastError ())== 1 ) // Обработка ошибок continue ; // Повторная попытка return ; // Выход из start() } break ; // Выход из while } //--------------------------------------------------------------- 9 -- return ; // Выход из start() } //-------------------------------------------------------------- 10 -- int Fun_Error( int Error) // Ф-ия обработ ошибок { switch (Error) { // Преодолимые ошибки case 4 : Alert ( "Торговый сервер занят. Пробуем ещё раз.." ); Sleep ( 3000 ); // Простое решение return ( 1 ); // Выход из функции case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." ); RefreshRates (); // Обновим данные return ( 1 ); // Выход из функции case 136 : Alert ( "Нет цен. Ждём новый тик.." ); while ( RefreshRates ()== false ) // До нового тика Sleep ( 1 ); // Задержка в цикле return ( 1 ); // Выход из функции case 137 : Alert ( "Брокер занят. Пробуем ещё раз.." ); Sleep ( 3000 ); // Простое решение return ( 1 ); // Выход из функции case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." ); Sleep ( 500 ); // Простое решение return ( 1 ); // Выход из функции // Критические ошибки case 2 : Alert ( "Общая ошибка." ); return ( 0 ); // Выход из функции case 5 : Alert ( "Старая версия терминала." ); Work= false ; // Больше не работать return ( 0 ); // Выход из функции case 64 : Alert ( "Счет заблокирован." ); Work= false ; // Больше не работать return ( 0 ); // Выход из функции case 133 : Alert ( "Торговля запрещена." ); return ( 0 ); // Выход из функции case 134 : Alert ( "Недостаточно денег для совершения операции." ); return ( 0 ); // Выход из функции default : Alert ( "Возникла ошибка " ,Error); // Другие варианты return ( 0 ); // Выход из функции } } //-------------------------------------------------------------- 11 -- int New_Stop( int Parametr) // Проверка стоп-прик. { int Min_Dist= MarketInfo (Symb, MODE_STOPLEVEL ); // Миним. дистанция if (Parametr < Min_Dist) // Если меньше допуст. { Parametr=Min_Dist; // Установим допуст. Alert ( "Увеличена дистанция стоп-приказа." ); } return (Parametr); // Возврат значения } //-------------------------------------------------------------- 12 --它也可以编译。 12 个警告,但没有一个会影响程序的性能。他们也被纠正了。因此,开始教程 - 就是这样。 Ihor Herasko 2019.02.27 20:18 #57 BillionerClub:如果你是一个初学者,可以学习C++。这里有一个很好的资源https://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-i-s这个人需要搭车,而你却让他跑来跑去。在学习MQL的阶段,原则上程序员是否需要编程,他是否能拉开这个问题。MQL比C++更容易。为什么要为复杂的事情而烦恼? 特别是,上述链接包括了MQL所没有的一切:标准库(MLQ有,但它自己的,不是C++),命名空间,通过cout和cin的输入和输出。 Vasiliy Kolesov 2019.02.27 20:24 #58 Ihor Herasko:汇编。没有任何错误。只有一个警告,只要对 "功能 "一词有基本了解,就很容易纠正。 我甚至举了一个更大一点的例子。 它也能编译。有12个警告,但没有一个影响到程序的可操作性。它们也可以很容易地被修复。这就是为什么《教程》是一个好的起点。我试了一下,不知道什么原因,没有成功。我以为是因为改名的缘故。谢谢你的尝试。也许我们应该回到它。 Dmitry Fedoseev 2019.02.27 20:37 #59 Vitaly Muzichenko:尤里,好吧,每个人都有起点。 我从.php开始,然后研究.js,因为没有它,写一些正常的东西根本不现实。当.js补充了jquery库的时候,这是一种乐趣,但你必须学习它。 许多人当时写道,这是胡说八道,你应该只使用纯.js,后来大家都转而使用jquery,因为库是很酷。 当我接触外汇时,我研究了.mql,因为我需要这样做,尽管这很难,它与php和js不一样。 因此,所有重要的是欲望。现在,要想成为一个很酷的孩子,光有jquery是不够的,你还得学习***多的框架。这就是普通程序员作为一个未完成的程序员的一生--他学会了一个框架,又一下子出现了三个。 Dmitry Fedoseev 2019.02.27 20:42 #60 Anastasia Vasilenko: 你学习了什么?如果你知道你已经知道什么和你能做什么就好了。一般来说--只要从终端套件中取出专家顾问,在编辑器中打开它,看看代码中的某些内容是否以不同的颜色突出显示--把光标放在那里,按f1,然后阅读帮助。 如果你对编程一点都不熟悉,不知道什么是for,if等。- 你可以从任何语言类的傻瓜书或儿童书开始。 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
从头开始学习科瓦廖夫的教科书并不方便,因为它已经过时了。你开始做一些练习,但它们没有被编译。而单纯的阅读,如果没有练习,就会使人更难记住东西。
我不认为我们在谈论任何简单的例子。它可能已经在一本教科书的末尾。而这可能是一个语法问题,如果你了解基本知识,就很容易纠正。在任何情况下,TC都可以问为什么这个或那个例子不能编译。
你能举出一个教程中不能编译的例子吗?举个例子,让我们把它分解一下。
建议你学习C++是正确的,因为MQL就是这样,而且关于C++的材料多得很。
如果你懂C++,那就从帮助中研究MQL,解析其他人的EA。
这是指如果一个人在MT以外的地方计划自己的活动。但人们无法事先计划这样的事情。现在的目标是学习为MT写作。如果一个人从C或C++开始,他就会被卡在那里,因为这些东西在MQL中一开始就没有。毕竟,即使是简单的数值打印也不能用cout来完成。在这方面,MQL要容易得多--打印 或警报。
所以最好是开始学习你需要的东西。以后,如果你喜欢它并想继续下去,你可以转到C++。
如果你是一个初学者,可以学习C++。这里有一个很好的资源https://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-i-s
避免非专业人士,他们的语言太干涩,根本记不住东西。使用记忆术技巧,互联网上有很多关于这个主题的书籍。
就个人而言,要记住一些东西,你必须想象一个功能,例如,作为一个现实世界的对象,增加更多的亮度和幽默,性,和超现实主义。
不如
必须在PositionOpen中再输入6个参数。其他参数不需要规定
这些几乎都不是什么简单的例子。它可能已经在一本教科书的末尾。而且,这可能是关于语法的问题,如果你了解基础知识,就很容易解决。在任何情况下,TC都可以问为什么这个或那个例子不能编译。
你能举出一个教程中不能编译的例子吗?让我们举一个例子。
是的,从一开始,比如说没有Start函数,现在是OnInit()。
我在这里找到了一个很好的描述,如果你从头开始https://sgr-tradeinvest.ru/mql4。
从一开始是的,例如没有 Start 函数,现在是OnInit()
编译。没有错误。只有一个警告,通过对“功能”一词的基本理解很容易纠正。
我什至举了一个稍微大一点的例子:
它也可以编译。 12 个警告,但没有一个会影响程序的性能。他们也被纠正了。因此,开始教程 - 就是这样。
如果你是一个初学者,可以学习C++。这里有一个很好的资源https://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-i-s
这个人需要搭车,而你却让他跑来跑去。在学习MQL的阶段,原则上程序员是否需要编程,他是否能拉开这个问题。MQL比C++更容易。为什么要为复杂的事情而烦恼?
特别是,上述链接包括了MQL所没有的一切:标准库(MLQ有,但它自己的,不是C++),命名空间,通过cout和cin的输入和输出。
汇编。没有任何错误。只有一个警告,只要对 "功能 "一词有基本了解,就很容易纠正。
我甚至举了一个更大一点的例子。
它也能编译。有12个警告,但没有一个影响到程序的可操作性。它们也可以很容易地被修复。这就是为什么《教程》是一个好的起点。
我试了一下,不知道什么原因,没有成功。我以为是因为改名的缘故。谢谢你的尝试。也许我们应该回到它。
尤里,好吧,每个人都有起点。
我从.php开始,然后研究.js,因为没有它,写一些正常的东西根本不现实。当.js补充了jquery库的时候,这是一种乐趣,但你必须学习它。 许多人当时写道,这是胡说八道,你应该只使用纯.js,后来大家都转而使用jquery,因为库是很酷。
当我接触外汇时,我研究了.mql,因为我需要这样做,尽管这很难,它与php和js不一样。
因此,所有重要的是欲望。
现在,要想成为一个很酷的孩子,光有jquery是不够的,你还得学习***多的框架。这就是普通程序员作为一个未完成的程序员的一生--他学会了一个框架,又一下子出现了三个。
你学习了什么?
如果你知道你已经知道什么和你能做什么就好了。一般来说--只要从终端套件中取出专家顾问,在编辑器中打开它,看看代码中的某些内容是否以不同的颜色突出显示--把光标放在那里,按f1,然后阅读帮助。
如果你对编程一点都不熟悉,不知道什么是for,if等。- 你可以从任何语言类的傻瓜书或儿童书开始。