MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1568 1...156115621563156415651566156715681569157015711572157315741575...1953 새 코멘트 Anatoliy Markov 2021.08.04 15:39 #15671 Alexey Viktorov : 식별자 CHART_PRICE_MIN 및 CHART_PRICE_MAX 포함 당신이 필요로하는 것처럼. 정말 감사합니다!!! Mikhail Tkachev 2021.08.04 17:26 #15672 MakarFX : true/false를 반환합니다. 몇시에 말씀하시는 건가요? 클래스는 이전 틱의 시간을 저장하고 true/false는 클래스가 아니라 클래스 멤버 함수에 의해 반환됩니다. void OnTick () { if (NB_M1.IsNewBar()) // (1) Если появился новый бар M1 {....} ...... } Tretyakov Rostyslav 2021.08.04 17:40 #15673 Mikhail Tkachev : 클래스는 이전 틱의 시간을 저장하고 true/false는 클래스가 아니라 클래스 멤버 함수에 의해 반환됩니다. 게시한 코드에서 public only bool! 클래스가 새로운 막대를 보고한다는 점을 고려하면 시간은 iTime(필요한 모든 것, 0)과 같으며, 각각, 이전 시간 iTime(필요한 모든 것, 1) Z.Y. 아마도 당신은 몇 분의 1초 안에 시간을 얻는 방법을 알고 있을 것입니다... Mikhail Tkachev 2021.08.04 17:47 #15674 MakarFX : 게시한 코드에서 public only bool! 클래스가 새로운 막대를 보고한다는 점을 고려하면 시간은 iTime(필요한 모든 것, 0)과 같으며, 각각, 이전 시간 iTime(필요한 모든 것, 1) Z.Y. 아마도 당신은 초 단위로 시간을 얻는 방법을 알고 있을 것입니다... 내가 조금 망쳤어, 미안해 나는 몇 분의 1초의 시간도 필요하지 않습니다. 새로운 바의 첫 1초를 잡아야 합니다. Tretyakov Rostyslav 2021.08.04 17:53 #15675 Mikhail Tkachev : 내가 조금 망쳤어, 미안해 나는 몇 분의 1초의 시간도 필요하지 않습니다. 새로운 바의 첫 1초를 잡아야 합니다. 그럼 datetime NB_M1; int OnInit () { } void OnTick () { if (CIsNewBar( _Symbol , PERIOD_M1 )) // (1) Если появился новый бар M1 {NB_M1= TimeCurrent ();} ...... } 이전 값을 유지하려면 datetime NB_01_M1, NB_02_M1; int OnInit () { } void OnTick () { if (CIsNewBar( _Symbol , PERIOD_M1 )) // (1) Если появился новый бар M1 {NB_02_M1=NB_01_M1; NB_01_M1= TimeCurrent ();} ...... } Mikhail Tkachev 2021.08.04 17:57 #15676 MakarFX : 그럼 MakarFX 감사합니다, 시도하겠습니다) законопослушный гражданин 2021.08.04 18:06 #15677 законопослушный гражданин : 네, 감사합니다. 생각해보고 테스터에서 실행하겠습니다. 코드의 마틴 기능에 대해 자세히 알려주세요. Martin이 수익성이 없는 주문 대신 수익성 있는 주문으로 확산되도록 어디에서 무엇을 교체해야 합니까? //+------------------------------------------------------------------+ //| 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 ); } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.08.04 18:33 #15678 законопослушный гражданин : 코드의 마틴 기능에 대해 자세히 알려주세요. Martin이 수익성이 없는 주문 대신 수익성 있는 주문으로 확산되도록 어디에서 무엇을 교체해야 합니까? 강조 표시됨...<0이면 손실 거래가 많이 증가합니다. >0이면 수익성 있는 거래가 많이 증가합니다. //+------------------------------------------------------------------+ //| Расчет лота | //+------------------------------------------------------------------+ 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); } Mihail Matkovskij 2021.08.04 18:54 #15679 AMarkov : 당신이 필요로하는 것처럼. 정말 감사합니다!!! 이것은 당신이 필요로하는 것이 아닙니다! 이렇게 하면 오실레이터가 아닌 기기의 최소 및 최대 가격 값을 얻을 수 있습니다. 숙련 된 프로그래머는 그러한 기본 질문에 그러한 답변을 제공하는 것이 부끄럽습니다 ... 실제로 CopyBufer로 오실레이터 데이터를 가져와야 합니다. int s, len; double main[]; double min, max; len = ( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS ); // длина копируемых видимых значений s = ( int ) ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR ) - len + 1 ; // 1-й видимый бар минус длина -- начало копируемых баров if ( CopyBuffer (handle, MAIN_LINE , s, len, main) != len) return ; // handle - хэндэл осциллятора // MAIN_LINE - меняем на нужный индекс буфера осциллятора // получаем мин. и макс. значения min = main[ ArrayMinimum (main, 0 , WHOLE_ARRAY )]; max = main[ ArrayMaximum (main, 0 , WHOLE_ARRAY )]; 오실레이터 를 만드는 방법 handle = iMACD ( NULL , PERIOD_CURRENT , 12 , 26 , 1 , PRICE_CLOSE ); 또는 필요한 다른 발진기. законопослушный гражданин 2021.08.04 19:12 #15680 MakarFX : 강조 표시됨...<0이면 손실 거래가 많이 증가합니다. >0이면 수익성 있는 거래가 많이 증가합니다. 정말 감사합니다 1...156115621563156415651566156715681569157015711572157315741575...1953 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
식별자 CHART_PRICE_MIN 및 CHART_PRICE_MAX 포함
true/false를 반환합니다. 몇시에 말씀하시는 건가요?
클래스는 이전 틱의 시간을 저장하고 true/false는 클래스가 아니라 클래스 멤버 함수에 의해 반환됩니다.
클래스는 이전 틱의 시간을 저장하고 true/false는 클래스가 아니라 클래스 멤버 함수에 의해 반환됩니다.
게시한 코드에서 public only bool!
클래스가 새로운 막대를 보고한다는 점을 고려하면 시간은 iTime(필요한 모든 것, 0)과 같으며,
각각, 이전 시간 iTime(필요한 모든 것, 1)
Z.Y. 아마도 당신은 몇 분의 1초 안에 시간을 얻는 방법을 알고 있을 것입니다...
게시한 코드에서 public only bool!
클래스가 새로운 막대를 보고한다는 점을 고려하면 시간은 iTime(필요한 모든 것, 0)과 같으며,
각각, 이전 시간 iTime(필요한 모든 것, 1)
Z.Y. 아마도 당신은 초 단위로 시간을 얻는 방법을 알고 있을 것입니다...
내가 조금 망쳤어, 미안해
나는 몇 분의 1초의 시간도 필요하지 않습니다. 새로운 바의 첫 1초를 잡아야 합니다.
내가 조금 망쳤어, 미안해
나는 몇 분의 1초의 시간도 필요하지 않습니다. 새로운 바의 첫 1초를 잡아야 합니다.
그럼
이전 값을 유지하려면
그럼
MakarFX 감사합니다, 시도하겠습니다)
네, 감사합니다. 생각해보고 테스터에서 실행하겠습니다.
코드의 마틴 기능에 대해 자세히 알려주세요.
Martin이 수익성이 없는 주문 대신 수익성 있는 주문으로 확산되도록 어디에서 무엇을 교체해야 합니까?
코드의 마틴 기능에 대해 자세히 알려주세요.
Martin이 수익성이 없는 주문 대신 수익성 있는 주문으로 확산되도록 어디에서 무엇을 교체해야 합니까?
강조 표시됨...<0이면 손실 거래가 많이 증가합니다.
>0이면 수익성 있는 거래가 많이 증가합니다.
당신이 필요로하는 것처럼. 정말 감사합니다!!!
이것은 당신이 필요로하는 것이 아닙니다! 이렇게 하면 오실레이터가 아닌 기기의 최소 및 최대 가격 값을 얻을 수 있습니다. 숙련 된 프로그래머는 그러한 기본 질문에 그러한 답변을 제공하는 것이 부끄럽습니다 ...
실제로 CopyBufer로 오실레이터 데이터를 가져와야 합니다.
오실레이터 를 만드는 방법
또는 필요한 다른 발진기.
강조 표시됨...<0이면 손실 거래가 많이 증가합니다.
>0이면 수익성 있는 거래가 많이 증가합니다.
정말 감사합니다