新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1816 1...180918101811181218131814181518161817181818191820182118221823...1953 新评论 Tretyakov Rostyslav 2021.12.15 10:34 #18151 Alexander Avksentyev #:我很抱歉对你的打扰。这不是侵扰性的。永远不要害怕说你不知道什么--总是问。 我给你举个例子。 Tretyakov Rostyslav 2021.12.15 10:42 #18152 Alexander Avksentyev #: 什么是 "iTrailStart "和 "iTrailDist"? Alexander Avksentyev 2021.12.15 10:44 #18153 Tretyakov Rostyslav #:什么是 "iTrailStart "和 "iTrailDist"? 打开的点的数量和从市场到拖网的距离 iTrailStart = 10; //启用拖网的点数。 iTrailDist = 10; //从停止到市场的距离。 如果订单在加11点,那么11-10=1点,没有损失。 Tretyakov Rostyslav 2021.12.15 11:02 #18154 Alexander Avksentyev #:包括的点的数量和从市场到TSL的距离 或多或少 //--- input parameters int iTrailStart = 10; //Кол-во пунктов для включения тралa int iTrailDist = 10; //Расстояние от стопа до рынка //--- global parameters int iDistTrail = iTrailDist; //+------------------------------------------------------------------+ void OnTick() { //--- if(iDistTrail<MarketInfo(Symbol(),MODE_STOPLEVEL)) iDistTrail = MarketInfo(Symbol(),MODE_STOPLEVEL); // дальше твой код } //+------------------------------------------------------------------+ void TrailSL() { if(iTrailStart <= 0) return; double sl_lev; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { if ((OrderStopLoss() == 0 && Bid > OrderOpenPrice() + iTrailStart * _Point)||(OrderStopLoss() != 0 && Bid > OrderStopLoss() + (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Bid - iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } if(OrderType() == OP_SELL) { if ((OrderStopLoss() == 0 && Ask < OrderOpenPrice() - iTrailStart * _Point)||(OrderStopLoss() != 0 && Ask < OrderStopLoss() - (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Ask + iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } } } } } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.12.15 11:14 #18155 是否有一个ENUM用于这些常数,还是我必须自己写? 恒定 价值 描述 DRAW_LINE 0 简单的线条 DRAW_SECTION 1 非空线值之间的线段 DRAW_HISTOGRAM 2 柱状图 DRAW_ARROW 3 箭头(符号) DRAW_ZIGZAG 4 偶数和奇数线的非空值之间的间隔(之字形),2 DRAW_NONE 12 没有任何形式的绘画 Alexey Viktorov 2021.12.15 11:25 #18156 Tretyakov Rostyslav #:是否有一个ENUM用于这些常数,还是我必须自己写? 恒定 价值 描述 DRAW_LINE 0 简单的线条 DRAW_SECTION 1 非空线值之间的线段 DRAW_HISTOGRAM 2 柱状图 DRAW_ARROW 3 箭头(符号) DRAW_ZIGZAG 4 偶数和奇数线的非空值之间的间隔(之字形),2 DRAW_NONE 12 没有图纸 绘画风格 ENUM_DRAW_TYPE 对不起,mql4没有这种东西... Tretyakov Rostyslav 2021.12.15 11:30 #18157 Alexey Viktorov #: 绘画风格 ENUM_DRAW_TYPE 对不起,mql4没有这个东西... 谢谢你,我将写我自己的) Alexander Avksentyev 2021.12.15 13:23 #18158 Tretyakov Rostyslav #:事情就是这样的。 谢谢,我将继续挖掘,弄清楚。 Alexander Avksentyev 2021.12.15 14:11 #18159 Tretyakov Rostyslav #:类似这样的事情 int Login = 4950287; datetime time = D'2022.01.01 00:00:00'; string name = "Test"; datetime time1 = 0; double TP, lastlot, minlot; int Forder; int TakeProfit,TrailStart,TrailDist,TrailStep,TrailTakeProfit,Step,Slippage; double level_count=0; int iDistTrail = iTrailDist; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //Torder-Цена открытия первого ордера //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(AccountNumber() != Login) { int close = MessageBox("Неверный номер счёта","Ошибка",MB_OK|MB_ICONSTOP); return(INIT_FAILED); }else (AccountNumber() == Login); { int close = MessageBox("Проверка прошла успешно.Экcперт может приступить к работе.","Инициализация",MB_OK|MB_ICONEXCLAMATION); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// if (TimeCurrent() > time) { int close = MessageBox("Время работы закончилось!!!","Время работы",MB_OK|MB_ICONSTOP); return(INIT_FAILED); }else(TimeCurrent() < time); { int close = MessageBox("Проверка времени работы прошла успешно.Эксперт может приступить к работе!","Время работы",MB_OK|MB_ICONEXCLAMATION); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// TakeProfit =iTakeProfit; TrailStart =iTrailStart; TrailDist =iTrailDist; TrailStep =iTrailStep; TrailTakeProfit =iTrailTakeProfit; Step =iStep; Slippage =iSlippage; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// if(Digits == 3 || Digits == 5) { TakeProfit *=10; TrailStart *=10; TrailDist *=10; TrailStep *=10; TrailTakeProfit *=10; Step *=10; Slippage *=10; } return(INIT_SUCCEEDED); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// /* Comment( "\n", name, "\n", " ", Symbol(), "\n", "Тайм Фрейм ", Period(), "\n", AccountCompany(), "\n", "\n ", AccountServer(), "\n", "Lots\n", B_S_Lot(), "\n", "Price ", Bid, "\n", "Дата ", TimeToString( TimeCurrent(), TIME_DATE ), "\n", "Server Time ", TimeToString( TimeCurrent(), TIME_SECONDS ), "\n", "Profit ", Profit(), "\n", "AvTP ", CalcTP (), "\n", "Количество ордеров ", CountTrades(), "\n", "\n ", GetVolumeLotLastOrder(), "\n", "\n", "Процент просадки ", NormalizeDouble( (AccountInfoDouble(ACCOUNT_BALANCE)-AccountInfoDouble(ACCOUNT_MARGIN_FREE))/AccountInfoDouble(ACCOUNT_BALANCE)*100,2) );*/ //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// double body = Close[1] - Open[1]; if (CountTrades() == 0 && body > 0) BuyOpen(); // Если нет открытых и сигнал бай if (CountTrades() == 0 && body < 0) SellOpen(); // Если нет открытых и сигнал селл if (CountTrades(0) > 0 && body > 0) BuyOpen(); // Если есть открытые бай и сигнал бай if (CountTrades(1) > 0 && body < 0) SellOpen(); // Если есть открытые селл и сигнал селл /* if (iTrailStart<MarketInfo(Symbol(),MODE_STOPLEVEL)) iTrailStart= MarketInfo(Symbol(), MODE_STOPLEVEL * Point); iTrailSL(); */ if(iDistTrail<MarketInfo(Symbol(),MODE_STOPLEVEL)) iDistTrail = MarketInfo(Symbol(),MODE_STOPLEVEL); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void BuyOpen() //Открытие позиции Buy { Forder = (OrderSend(_Symbol,OP_BUY,Lot,Ask,iSlippage,0,0,"Коммент",Magic,0,Blue)); if(Forder > 0) { Print("Открыта Позиция BUY"); if(OrderSelect(Forder, SELECT_BY_TICKET)) { TP = NormalizeDouble((Ask+iTakeProfit*_Point),_Digits); if (OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0)) Print("Ордер Модифицирован BUY "); else Print("Ошибка Модификации Ордера BUY = ",GetLastError()); } } else Print("Ошибка Открытия Позиции BUY"); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void SellOpen() //Открытие позиции Sell { Forder = (OrderSend(_Symbol,OP_SELL,Lot,Bid,iSlippage,0,0,"Коммент Sell",Magic,0,Red)); if (Forder > 0) { Print("Открыта Позиция SELL"); if(OrderSelect(Forder, SELECT_BY_TICKET)) { TP = NormalizeDouble((Bid-iTakeProfit*_Point),_Digits); if (OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0)) Print("Ордер Модифицирован SELL "); else Print("Ошибка Модификации Ордера SELL = ",GetLastError()); } } else Print("Ошибка Открытия Позиции SELL"); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Tester function | //+------------------------------------------------------------------+ double OnTester() { //--- double ret=0.0; //--- //--- return(ret); } //+------------------------------------------------------------------+ //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Подсчёт эквити | //+------------------------------------------------------------------+ double Profit(){double count=0; for (int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic) count+=OrderProfit(); count+=OrderSwap(); } } return(NormalizeDouble(count, 2)); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void TrailSL() { if(iTrailStart <= 0) return; double sl_lev; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { if ((OrderStopLoss() == 0 && Bid > OrderOpenPrice() + iTrailStart * _Point)||(OrderStopLoss() != 0 && Bid > OrderStopLoss() + (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Bid - iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } if(OrderType() == OP_SELL) { if ((OrderStopLoss() == 0 && Ask < OrderOpenPrice() - iTrailStart * _Point)||(OrderStopLoss() != 0 && Ask < OrderStopLoss() - (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Ask + iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } } } } } //+------------------------------------------------------------------+ 这是代码,也许我弄错了,但没有任何效果。 Tretyakov Rostyslav 2021.12.15 14:38 #18160 Alexander Avksentyev #:这是代码,也许我弄错了,但没有任何效果。 记录本里有什么? 发布整个代码,把它作为一个文件附上。 1...180918101811181218131814181518161817181818191820182118221823...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我很抱歉对你的打扰。
这不是侵扰性的。永远不要害怕说你不知道什么--总是问。
我给你举个例子。什么是 "iTrailStart "和 "iTrailDist"?
什么是 "iTrailStart "和 "iTrailDist"?
打开的点的数量和从市场到拖网的距离
iTrailStart = 10; //启用拖网的点数。
iTrailDist = 10; //从停止到市场的距离。
如果订单在加11点,那么11-10=1点,没有损失。
包括的点的数量和从市场到TSL的距离
或多或少
是否有一个ENUM用于这些常数,还是我必须自己写?
恒定
价值
描述
DRAW_LINE
0
简单的线条
DRAW_SECTION
1
非空线值之间的线段
DRAW_HISTOGRAM
2
柱状图
DRAW_ARROW
3
箭头(符号)
DRAW_ZIGZAG
4
偶数和奇数线的非空值之间的间隔(之字形),2
DRAW_NONE
12
没有任何形式的绘画
是否有一个ENUM用于这些常数,还是我必须自己写?
恒定
价值
描述
DRAW_LINE
0
简单的线条
DRAW_SECTION
1
非空线值之间的线段
DRAW_HISTOGRAM
2
柱状图
DRAW_ARROW
3
箭头(符号)
DRAW_ZIGZAG
4
偶数和奇数线的非空值之间的间隔(之字形),2
DRAW_NONE
12
没有图纸
ENUM_DRAW_TYPE
绘画风格
ENUM_DRAW_TYPE
事情就是这样的。
谢谢,我将继续挖掘,弄清楚。
类似这样的事情
这是代码,也许我弄错了,但没有任何效果。
这是代码,也许我弄错了,但没有任何效果。
记录本里有什么?
发布整个代码,把它作为一个文件附上。