新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1558 1...155115521553155415551556155715581559156015611562156315641565...1953 新评论 Tretyakov Rostyslav 2021.08.01 11:47 #15571 Alexey Viktorov:不客气,但我似乎没有做什么......这里 законопослушный гражданин 2021.08.01 15:38 #15572 MakarFX: 这里 谢谢你,然后Alexey Viktorov 也是! Alexey Viktorov 2021.06.30www.mql5.com Профиль трейдера Tretyakov Rostyslav 2021.08.02 05:17 #15573 законопослушный гражданин :尝试一下您可以编辑“开单信号”功能//+------------------------------------------------------------------+ //| Citizen.v2.1.mq4 | //| Copyright 2020, DrMak. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, DrMak." #property link " https://www.mql5.com " #property version "1.00" #property strict //--- input parameters input ENUM_TIMEFRAMES timeframe_RSI = PERIOD_H1 ; input int period_RSI = 14 ; input int level_buy = 30 ; input int level_sell = 70 ; input double Lot = 0.1 ; // Размер стартового лота input double K_Martin = 2.0 ; // Размер увеличения лота(Мартин) input int Stoploss = 100 ; // Размер StopLoss в пунктах input int Takeprofit = 500 ; // Размер TakeProfit в пунктах input double CountLoss = 200 ; // Размер максимального убытка input double CountProfit = 300 ; // Размер минимального профита input int Magic = 777 ; // Магик input int DigitsLot = 2 ; // Шаг лота input int slippage = 3 ; // Проскальзывание //--- string AC; datetime Start; double AB,MINLOT,MAXLOT,RSI1,RSI0,SL,TP,sl,tp; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- create timer ObjectsDeleteAll ( 0 , "lab_" ); EventSetMillisecondTimer ( 500 ); Start = TimeCurrent (); MINLOT = MarketInfo( Symbol (),MODE_MINLOT); MAXLOT = MarketInfo( Symbol (),MODE_MAXLOT); AC = StringConcatenate ( " " , AccountCurrency()); AB = AccountInfoDouble ( ACCOUNT_BALANCE ); int Y= 20 ; CreateButton( 0 , "lab_Button" , 0 , 79 ,Y, 77 , 25 , CORNER_RIGHT_UPPER , "Советник остановлен" , "START" , "Arial Black" , 10 , clrWhite , clrGreen , false , false , false , false , false , 0 );Y += 25 ; DrawLABEL( "lab_Торговля" , 1 , 5 ,Y, clrRed , "Торговля " );Y += 20 ; DrawLABEL( "lab_Start Time" , 1 , 5 ,Y, clrGreen , StringConcatenate ( "Start Time: " ,TimeToStr(Start, TIME_DATE | TIME_SECONDS )));Y += 15 ; DrawLABEL( "lab_Current Lot" , 1 , 5 ,Y, clrGreen , StringConcatenate ( "Current Lot: " ,DoubleToStr(Lots(),DigitsLot)));Y += 15 ; DrawLABEL( "lab_Balance" , 1 , 5 ,Y, clrGreen , StringConcatenate ( "Balance: " ,DoubleToStr(AccountBalance(), 2 ),AC));Y += 15 ; DrawLABEL( "lab_Equity" , 1 , 5 ,Y, clrGreen , StringConcatenate ( "Equity: " ,DoubleToStr(AccountEquity(), 2 ),AC));Y += 15 ; DrawLABEL( "lab_FreeMargin" , 1 , 5 ,Y, clrGreen , StringConcatenate ( "FreeMargin: " ,DoubleToStr(AccountFreeMargin(), 2 ),AC));Y += 30 ; DrawLABEL( "lab_Take" , 1 , 5 ,Y, clrLime , "Profit: " ); //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { //--- destroy timer EventKillTimer (); if (!IsTesting()) { ObjectsDeleteAll ( 0 , "lab_" ); } } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { //--- if (IsTesting()) { if ( ObjectGetInteger ( 0 , "lab_Button" , OBJPROP_STATE )== true ) { ObjectSetInteger ( 0 , "lab_Button" , OBJPROP_BGCOLOR , clrRed ); ObjectSetString ( 0 , "lab_Button" , OBJPROP_TOOLTIP , "Советник запущен" ); ObjectSetString ( 0 , "lab_Button" , OBJPROP_TEXT , "STOP" ); } if ( ObjectGetInteger ( 0 , "lab_Button" , OBJPROP_STATE )== false ) { ObjectSetInteger ( 0 , "lab_Button" , OBJPROP_BGCOLOR , clrGreen ); ObjectSetString ( 0 , "lab_Button" , OBJPROP_TOOLTIP , "Советник остановлен" ); ObjectSetString ( 0 , "lab_Button" , OBJPROP_TEXT , "START" ); Start = iTime ( _Symbol , PERIOD_D1 , 0 ); } } if (GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*- 1 ) { if (IsTesting()) { CloseOrder(); ObjectSetInteger ( 0 , "lab_Button" , OBJPROP_STATE , false ); } else { CloseOrder(); } } // Обновляем текст на лейблах DrawLABEL( "lab_Start Time" , 1 , 5 , 0 , clrGreen , StringConcatenate ( "Start Time: " ,TimeToStr(Start, TIME_DATE | TIME_SECONDS ))); DrawLABEL( "lab_Current Lot" , 1 , 5 , 0 , clrGreen , StringConcatenate ( "Current Lot: " ,DoubleToStr(Lots(),DigitsLot))); DrawLABEL( "lab_Balance" , 1 , 5 , 0 , clrGreen , StringConcatenate ( "Balance: " ,DoubleToStr(AB, 2 ),AC)); DrawLABEL( "lab_Equity" , 1 , 5 , 0 , clrGreen , StringConcatenate ( "Equity: " ,DoubleToStr(AccountEquity(), 2 ),AC)); DrawLABEL( "lab_FreeMargin" , 1 , 5 , 0 , clrGreen , StringConcatenate ( "FreeMargin: " ,DoubleToStr(AccountFreeMargin(), 2 ),AC)); DrawLABEL( "lab_Take" , 1 , 5 , 0 ,Color(GetProfitFromStart()> 0 ,Lime,Red), StringConcatenate ( "Profit: " ,DoubleToStr(GetProfitFromStart(), 2 ),AC)); //--- sl = MathMax (Stoploss, MarketInfo( _Symbol , MODE_STOPLEVEL)) * Point (); SL = NormalizeDouble (sl* Point (), Digits ); tp = MathMax (Takeprofit, MarketInfo( _Symbol , MODE_STOPLEVEL)) * Point (); TP = NormalizeDouble (tp* Point (), Digits ); //--- if (CountOrders()== 0 && ObjectGetInteger ( 0 , "lab_Button" , OBJPROP_STATE )) { if (TradeSignal()>= 0 ) { SendOrder(TradeSignal()); } } //--- if (!IsTradeAllowed()) {DrawLABEL( "lab_Торговля" , 0 , 0 , 0 , clrRed , "Торговля запрещена" ); return ;} else {DrawLABEL( "lab_Торговля" , 0 , 0 , 0 , clrLime , "Торговля разрешена" );} } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer () { //--- } //+------------------------------------------------------------------+ //| Сигнал для открытия ордера | //+------------------------------------------------------------------+ int TradeSignal() { int sig=- 1 ; // Здесь расчет сигнала RSI0= iRSI ( NULL ,timeframe_RSI,period_RSI, PRICE_CLOSE , 0 ); RSI1= iRSI ( NULL ,timeframe_RSI,period_RSI, PRICE_CLOSE , 1 ); // Здесь определение направления сигнала sig=0-BUY, sig=1-SELL if (RSI0>=level_buy && RSI1<=level_buy) sig= 0 ; if (RSI0<=level_sell && RSI1>=level_sell) sig= 1 ; return (sig); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam) { //--- if (sparam== "lab_Button" ) TradeButton(); } //+--------------------------------------------------------------------------------------------------------------------+ //| ButtonSTART | //+--------------------------------------------------------------------------------------------------------------------+ void TradeButton() { if ( ObjectGetInteger ( 0 , "lab_Button" , OBJPROP_STATE )== true ) { ObjectSetInteger ( 0 , "lab_Button" , OBJPROP_BGCOLOR , clrRed ); ObjectSetString ( 0 , "lab_Button" , OBJPROP_TOOLTIP , "Советник запущен" ); ObjectSetString ( 0 , "lab_Button" , OBJPROP_TEXT , "STOP" ); } if ( ObjectGetInteger ( 0 , "lab_Button" , OBJPROP_STATE )== false ) { ObjectSetInteger ( 0 , "lab_Button" , OBJPROP_BGCOLOR , clrGreen ); ObjectSetString ( 0 , "lab_Button" , OBJPROP_TOOLTIP , "Советник остановлен" ); ObjectSetString ( 0 , "lab_Button" , OBJPROP_TEXT , "START" ); Start = TimeCurrent (); } } //+------------------------------------------------------------------+ //| Расчет лота | //+------------------------------------------------------------------+ double Lots() { double L= 0 ; if (GetInfoLastPos( 3 )>Start && GetInfoLastPos( 2 )< 0 ) {L= NormalizeDouble (GetInfoLastPos( 1 )*K_Martin,DigitsLot);} else {L=Lot;} if (L>MAXLOT) L = MAXLOT; if (L<MINLOT) L = MINLOT; return (L); } //+----------------------------------------------------------------------------+ //| Функция возвращает по символу и магику | //| размер профита с учетом комиссии и свопа с начала цикла | //+----------------------------------------------------------------------------+ double GetProfitFromStart() { double lp= 0 ,cp= 0 ; for ( int i= 0 ; i<OrdersHistoryTotal(); i++) { if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (Start<OrderCloseTime()) {lp+=OrderProfit()+OrderCommission()+OrderSwap();} } } } } for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--) { if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) {cp=OrderProfit()+OrderCommission()+OrderSwap();} } } } return (lp+cp); } //+----------------------------------------------------------------------------+ //| Функция возвращает по символу и магику | //| 1 - размер лота последней закрытой позиции | //| 2 - размер профита с учетом комиссии и свопа последней закрытой позиции | //| 3 - время последней закрытой позиции | //+----------------------------------------------------------------------------+ double GetInfoLastPos( int a= 1 ) { datetime t= 0 ; double result= 0 ,l= 0 ,p= 0 ,f= 0 ; int i=OrdersHistoryTotal(); for ( int pos= 0 ; pos<i; pos++) { if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();} } } } } if (a== 1 ) {result=l;} else if (a== 2 ) {result=p;} else if (a== 3 ) {result=( double )t;} else {result= 0 ;} return (result); } //+------------------------------------------------------------------+ //| Подсчет открытых ордеров | //+------------------------------------------------------------------+ int CountOrders() { int cnt= 0 ; int i= OrdersTotal ()- 1 ; for ( int pos=i;pos>= 0 ;pos--) { if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()== _Symbol ) { if (OrderMagicNumber()==Magic) cnt++; } } } return (cnt); } //+------------------------------------------------------------------+ //| Открытие ордера | //+------------------------------------------------------------------+ void SendOrder( int so= 0 ) { if (so== 0 ) { if ( OrderSend ( Symbol (),OP_BUY, Lots(),Ask,slippage,Ask-sl,Ask+tp, NULL ,Magic, 0 , clrBlue )) { Print ( "Open Buy: " , _Symbol );} else { Print ( "Error Open Buy: " , _Symbol , " / " , GetLastError ());} } if (so== 1 ) { if ( OrderSend ( Symbol (),OP_SELL, Lots(),Bid,slippage,Bid+sl,Bid-tp, NULL ,Magic, 0 , clrBlue )) { Print ( "Open Sell: " , _Symbol );} else { Print ( "Error Open Sell: " , _Symbol , " / " , GetLastError ());} } } //+------------------------------------------------------------------+ //| Закрытие открытого ордера | //+------------------------------------------------------------------+ void CloseOrder() { int i= OrdersTotal ()- 1 ; for ( int pos=i;pos>= 0 ;pos--) { if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY) { if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage, clrBlue )) TradeButton(); } if (OrderType()==OP_SELL) { if (OrderClose(OrderTicket(),OrderLots(),Ask,slippage, clrRed )) TradeButton(); } } } } } //+------------------------------------------------------------------+ //| Установка цвета | //+------------------------------------------------------------------+ color Color( bool P, color a, color b) { if (P) return (a); else return (b); } //+------------------------------------------------------------------+ //| Установка лейблов/текста | //+------------------------------------------------------------------+ void DrawLABEL( string name, int CORNER, int X, int Y, color clr, string Name) { if ( ObjectFind ( 0 ,name)!= 0 ) { ObjectCreate ( 0 ,name, OBJ_LABEL , 0 , 0 , 0 ); ObjectSet(name, OBJPROP_CORNER , CORNER); ObjectSet(name, OBJPROP_XDISTANCE , X); ObjectSet(name, OBJPROP_YDISTANCE , Y); } ObjectSetText(name,Name, 10 , "Arial" ,clr); } //+--------------------------------------------------------------------------------------------------------------------+ //| Создает кнопку | //+--------------------------------------------------------------------------------------------------------------------+ bool CreateButton( const long chart_ID= 0 , // ID графика const string name= "Button" , // имя кнопки const int sub_window= 0 , // номер подокна const int x= 0 , // координата по оси X const int y= 0 , // координата по оси Y const int width= 50 , // ширина кнопки const int height= 18 , // высота кнопки const int corner= 0 , // угол графика для привязки const string tool= "TOOLTIP" , // TOOLTIP const string text= "Button" , // текст const string font= "Arial" , // шрифт const int font_size= 10 , // размер шрифта const color clr= clrBlack , // цвет текста const color back_clr= C'236,233,216' , // цвет фона const bool state= false , // нажата/отжата const bool back= false , // на заднем плане const bool selection= false , // выделить для перемещений const bool selected= false , // выделить для перемещений const bool hidden= true , // скрыт в списке объектов const long z_order= 0 ) // приоритет на нажатие мышью { //--- сбросим значение ошибки ResetLastError (); //--- создадим кнопку if (! ObjectCreate (chart_ID,name, OBJ_BUTTON ,sub_window, 0 , 0 )) { Print ( __FUNCTION__ , ": не удалось создать кнопку! Код ошибки = " , GetLastError ()); return ( false ); } ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x); ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y); ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width); ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height); ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner); ObjectSetString (chart_ID,name, OBJPROP_TOOLTIP ,tool); ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text); ObjectSetString (chart_ID,name, OBJPROP_FONT ,font); ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size); ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr); ObjectSetInteger (chart_ID,name, OBJPROP_BGCOLOR ,back_clr); ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back); ObjectSetInteger (chart_ID,name, OBJPROP_STATE ,state); ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selected); ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden); ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order); //--- успешное выполнение return ( true ); } //+------------------------------------------------------------------+ законопослушный гражданин 2021.08.02 09:31 #15574 MakarFX:试试吧。 你可以编辑 "打开订单的信号 "功能。 哇,这已经成为一个多么巨大的代码。 非常感谢--今天就来试一试。 Константин 2021.08.02 12:02 #15575 专业人士,一个提示...我在图表上 做了一个按钮。 ) { if(id == CHARTEVENT_OBJECT_CLICK) { if(sparam == button.Name()) { Alert("Button \""+sparam+"\" clicked!"); // Вместо этого функция с кодом... button.State(0); ChartRedraw(0); }}} 试图使它在按下按钮时,而不是警报时,一个名为K1的脚本将运行,当再次按下时,该脚本将被删除,但没有成功。谢谢你。 Tretyakov Rostyslav 2021.08.02 14:16 #15576 Константин:专业人士,一个提示...我在图表上 做了一个按钮。试图使它在按下按钮时,而不是警报时,一个名为K1的脚本将运行,当再次按下时,该脚本将被删除,但没有成功。谢谢你。 最好把脚本代码写在按钮的地方 законопослушный гражданин 2021.08.02 15:25 #15577 MakarFX:试试吧。 在 "开单信号 "功能中,你可以编辑 在测试器中试过猫头鹰,一切都很好。 但我有几个问题。 正如我从测试中了解到的那样,猫头鹰根据指定的参数跟踪当前的利润/亏损,而且对它来说发生多少次交易没有任何区别。 我想知道我是在一次交易中达到了指定的利润/损失,还是在连续三次交易中达到了指定的利润/损失? 2.我要求我的专家顾问缩减25美元,但它在大手数上缩减了40美元,这对测试者来说是正常的吗? 也许不可能以最大速度运行测试? 3.是否有可能在每笔交易后重置对当前利润/亏损的跟踪,无论它是由哪个信号关闭的(TP/SL或在达到指定的利润/亏损 金额后)? Tretyakov Rostyslav 2021.08.02 15:41 #15578 законопослушный гражданин:在测试器中试过猫头鹰,一切都很好。但我有几个问题。正如我从测试中了解到的那样,猫头鹰根据指定的参数跟踪当前的利润/亏损,对它来说,发生多少次交易没有任何区别。我想知道我是在一次交易中达到了指定的利润/损失,还是在连续三次交易中达到了指定的利润/损失?2.我要求我的专家顾问缩减25美元,但它在大手数上缩减了40美元,这对测试者来说是正常的吗? 也许不可能以最大速度运行测试?3.是否有可能在每笔交易结束后重置对当前利润/亏损的跟踪,不管是通过哪种信号关闭的(tp/sl或达到指定的利润/亏损 后)? 1)在高速状态下,或者如果在测试器中不在刻度线上,它将在第一个可用的价格关闭。 2)你有大量的增加,而在大量的情况下,1分可能超过了允许的水平。 3)我不明白你想要什么,如果每次交易后归零,你需要跟踪什么? Tsaryoff5614 2021.08.02 15:44 #15579 下午好,各位程序员!!!。 请帮助一个新手的功能。 该函数按历史统计总利润。 问题是,它对一个经纪商有效,而对另一个经纪商却不愿意工作。 它在Hercic上工作,但在RoboForex上没有。我在RoboForex有一个ECN账户。 我不知道问题出在哪里。以下是代码。 double lastloss() { int typ = -1,cnt = 0; double lastloss = 0; for(int i = OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(cnt == 0) typ = OrderType(); if(cnt > 0 && OrderType()!= typ) break; Lastlos += OrderProfit() + + OrderSwap() + OrderCommission()。 cnt++。 } } } return(lastlos)。 } Документация по MQL5: Торговые функции / OrderSelect www.mql5.com OrderSelect - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 关闭订单的利润计算 "HELP" Any questions from newcomers Profit calculation of closed Mihail Matkovskij 2021.08.02 15:51 #15580 你好。有谁知道有什么免费的MQL库可以将数据结构 写入文件并在之后加载?理想情况下是一个能与json格式、json 解析器等一起工作的库。 1...155115521553155415551556155715581559156015611562156315641565...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不客气,但我似乎没有做什么......
这里
谢谢你,然后Alexey Viktorov 也是!
尝试一下
您可以编辑“开单信号”功能
试试吧。
你可以编辑 "打开订单的信号 "功能。
哇,这已经成为一个多么巨大的代码。
非常感谢--今天就来试一试。
专业人士,一个提示...我在图表上 做了一个按钮。
试图使它在按下按钮时,而不是警报时,一个名为K1的脚本将运行,当再次按下时,该脚本将被删除,但没有成功。谢谢你。
专业人士,一个提示...我在图表上 做了一个按钮。
试图使它在按下按钮时,而不是警报时,一个名为K1的脚本将运行,当再次按下时,该脚本将被删除,但没有成功。谢谢你。
试试吧。
在 "开单信号 "功能中,你可以编辑
在测试器中试过猫头鹰,一切都很好。
但我有几个问题。
正如我从测试中了解到的那样,猫头鹰根据指定的参数跟踪当前的利润/亏损,而且对它来说发生多少次交易没有任何区别。
我想知道我是在一次交易中达到了指定的利润/损失,还是在连续三次交易中达到了指定的利润/损失?
2.我要求我的专家顾问缩减25美元,但它在大手数上缩减了40美元,这对测试者来说是正常的吗? 也许不可能以最大速度运行测试?
3.是否有可能在每笔交易后重置对当前利润/亏损的跟踪,无论它是由哪个信号关闭的(TP/SL或在达到指定的利润/亏损 金额后)?
在测试器中试过猫头鹰,一切都很好。
但我有几个问题。
正如我从测试中了解到的那样,猫头鹰根据指定的参数跟踪当前的利润/亏损,对它来说,发生多少次交易没有任何区别。
我想知道我是在一次交易中达到了指定的利润/损失,还是在连续三次交易中达到了指定的利润/损失?
2.我要求我的专家顾问缩减25美元,但它在大手数上缩减了40美元,这对测试者来说是正常的吗? 也许不可能以最大速度运行测试?
3.是否有可能在每笔交易结束后重置对当前利润/亏损的跟踪,不管是通过哪种信号关闭的(tp/sl或达到指定的利润/亏损 后)?
1)在高速状态下,或者如果在测试器中不在刻度线上,它将在第一个可用的价格关闭。
2)你有大量的增加,而在大量的情况下,1分可能超过了允许的水平。
3)我不明白你想要什么,如果每次交易后归零,你需要跟踪什么?
下午好,各位程序员!!!。
请帮助一个新手的功能。
该函数按历史统计总利润。
问题是,它对一个经纪商有效,而对另一个经纪商却不愿意工作。
它在Hercic上工作,但在RoboForex上没有。我在RoboForex有一个ECN账户。
我不知道问题出在哪里。以下是代码。
double lastloss()
{
int typ = -1,cnt = 0;
double lastloss = 0;
for(int i = OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(cnt == 0) typ = OrderType();
if(cnt > 0 && OrderType()!= typ) break;
Lastlos += OrderProfit() + + OrderSwap() + OrderCommission()。
cnt++。
}
}
}
return(lastlos)。
}