로봇 만들기 - 페이지 2

 
Renat Akhtyamov :
코드베이스를 살펴보면 많은 전문가들이 있습니다. 그 중 하나의 코드를 철저히 연구하면 이해할 수 있습니다. 작업이 30분 이상 프로그래밍되지 않도록

작업에 따라 ... 템플릿이 있지만 너무 원시적입니다 :(

 
VVT :

작업에 따라 ... 템플릿이 있지만 너무 원시적입니다 :(

그리고 족발 소화 안됨 😂
 
VVT :

작업에 따라 ... 템플릿이 있지만 너무 원시적입니다 :(

한 가지는 프로그램이 더 원시적일수록 실패할 위험이 적다는 것을 압니다. 실제로 정비공과 마찬가지로 부품이 적을수록 메커니즘이 더 안정적입니다. 따라서 가장 중요한 것은 기능과 안정성 간의 균형입니다.

 
Роман Жилин :

한 가지는 프로그램이 더 원시적일수록 실패할 위험이 적다는 것을 압니다. 실제로 정비공과 마찬가지로 부품이 적을수록 메커니즘이 더 안정적입니다. 따라서 가장 중요한 것은 기능과 안정성 간의 균형입니다.

동의합니다. 나는 이미 여기 어딘가에 비슷한 의견을 표명했습니다. 고문은 작업 구현에 가장 필요한 것을 가지고 있어야하며 다른 모든 것은 껍질이며 컴퓨터의 리소스 만 제거합니다.

 

버튼에서 빠르게 열려면 여기에서 눈이 멀었습니다.

 //+------------------------------------------------------------------+
//|                                                         0001.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#define   InpMagic   182979245
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
//---
CPositionInfo  m_position; // trade position object
CTrade         m_trade;     // trading object
CSymbolInfo    m_symbol;   // symbol info object
//---
input double InpLots          = 0.01 ; // Lots
//---
double m_adjusted_point;   // point value adjusted for 3 or 5 points
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   if (!m_symbol.Name( Symbol ())) // sets symbol name
       return ( INIT_FAILED );;
//---
   m_trade.SetExpertMagicNumber(InpMagic);
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
//--- tuning for 3 or 5 digits
   int digits_adjust= 1 ;
   if (m_symbol. Digits ()== 3 || m_symbol. Digits ()== 5 )
      digits_adjust= 10 ;
   m_adjusted_point=m_symbol. Point ()*digits_adjust;
//---
   m_trade.SetDeviationInPoints( 3 *digits_adjust);
   if (!m_position.Select( Symbol ()))
     {
      CheckObject();
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   if ( ObjectFind ( 0 , "BUY" )== 0 )
     {
       ObjectDelete ( 0 , "BUY" );
     }
   if ( ObjectFind ( 0 , "SELL" )== 0 )
     {
       ObjectDelete ( 0 , "SELL" );
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   CheckButon();
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CheckButon( void )
  {
//---
   bool res= false ;
     {
       if ( ObjectGetInteger ( 0 , "BUY" , OBJPROP_STATE )!= 0 )
        {
         ObjectSetInteger ( 0 , "BUY" , OBJPROP_STATE , 0 );
         double price=m_symbol.Ask();
           {
             //--- open position
             if (m_trade.PositionOpen(m_symbol.Name(), ORDER_TYPE_BUY ,InpLots,price, 0.0 , 0.0 ))
               printf ( "Position by %s to be opened" ,m_symbol.Name());
             else
              {
               printf ( "Error opening BUY position by %s : '%s'" ,m_symbol.Name(),m_trade.ResultComment());
               printf ( "Open parameters : price=%f,TP=%f" ,price, 0.0 );
              }
             PlaySound ( "ok.wav" );
           }
        }
       if ( ObjectGetInteger ( 0 , "SELL" , OBJPROP_STATE )!= 0 )
        {
         ObjectSetInteger ( 0 , "SELL" , OBJPROP_STATE , 0 );
         double price0=m_symbol.Bid();
           {
             if (m_trade.PositionOpen(m_symbol.Name(), ORDER_TYPE_SELL ,InpLots,price0, 0.0 , 0.0 ))
               printf ( "Position by %s to be opened" ,m_symbol.Name());
             else
              {
               printf ( "Error opening SELL position by %s : '%s'" ,m_symbol.Name(),m_trade.ResultComment());
               printf ( "Open parameters : price=%f,TP=%f" ,price0, 0.0 );
              }
             PlaySound ( "ok.wav" );
           }
        }
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CheckObject( void )
  {
//---
   bool res= false ;
     {
       ObjectCreate ( 0 , "BUY" , OBJ_BUTTON , 0 , 0 , 0 );
       ObjectSetInteger ( 0 , "BUY" , OBJPROP_XDISTANCE , ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS )- 102 );
       ObjectSetInteger ( 0 , "BUY" , OBJPROP_YDISTANCE , 37 );
       ObjectSetString ( 0 , "BUY" , OBJPROP_TEXT , "BUY" );
       ObjectSetInteger ( 0 , "BUY" , OBJPROP_BGCOLOR , clrMediumSeaGreen );
       ObjectCreate ( 0 , "SELL" , OBJ_BUTTON , 0 , 0 , 0 );
       ObjectSetInteger ( 0 , "SELL" , OBJPROP_XDISTANCE , ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS )- 50 );
       ObjectSetInteger ( 0 , "SELL" , OBJPROP_YDISTANCE , 37 );
       ObjectSetString ( 0 , "SELL" , OBJPROP_TEXT , "SELL" );
       ObjectSetInteger ( 0 , "SELL" , OBJPROP_BGCOLOR , clrDarkOrange );
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
파일:
0001.mq5  5 kb
 
SanAlex :

버튼에서 빠르게 열 수 있도록 눈이 멀었습니다.

고마워요, 일단 생각하고 공부해요

 
Роман Жилин :

감사합니다 생각하고 공부해봅니다

조언자에게 전략을 조정하는 것은 권장하지 않습니다. 그 반대의 경우도 마찬가지입니다. 또는 다른 고문의 필요한 부분을 모아서 전략을 구현할 수 있습니다.

 
Роман Жилин :

초보자에게 올바른 방향이 필요합니다. 원을 걷는 것 같습니다.


Directory-Forum-Articles-Compiler-Errors(매번 원 안에 등)

뭔가 새로운 걸 배운 것 같으면서도 많이 가라앉은 느낌이 들어서 어드바이저 초반에는 가장 간단한 거래도 열 수 없다. 길이 없는 밤에는 최소한 누군가가 깊은 수풀에서 등불을 밝혀야 합니다. 내가 길을 잃은 것처럼 나는 방황합니다.


완전히 프로그래밍하고 거래가 시작되면 거래를 시작하고 무엇이 무엇인지 설명하도록 요청합니다. 많이 도와주세요.

안녕하세요 로만님!

저에게 많은 도움이 된 초보자를 위한 두 가지 훌륭한 기사가 있습니다.

https://www.mql5.com/en/articles/481

https://www.mql5.com/ru/articles/496

안부 인사를 전합니다. 블라디미르.

Торговые операции на MQL5 - это просто
Торговые операции на MQL5 - это просто
  • www.mql5.com
Почти все трейдеры приходят на рынок для того, чтобы заработать денег, хотя есть и доля тех, кому важен не сам торговый результат, а участие в процессе, драйв. Впрочем, получить удовольствие от процесса можно не только торгуя вручную, но и занимаясь разработкой автоматических торговых систем. Ведь создание торгового робота может быть таким же...
 
MrBrooklin :

안녕하세요 로만님!

저에게 많은 도움이 된 초보자를 위한 두 가지 훌륭한 기사가 있습니다.

https://www.mql5.com/en/articles/481

https://www.mql5.com/ru/articles/496

안부 인사를 전합니다. 블라디미르.

블라디미르님, 감사합니다. 나는 첫 번째 기사를 보았지만 두 번째 기사는 지금 내게 필요한 것입니다.


존경합니다, 로만.

 
Роман Жилин :

블라디미르님, 감사합니다. 나는 첫 번째 기사를 보았지만 두 번째 기사는 지금 내게 필요한 것입니다.


존경합니다, 로만.

게다가 지금은 MQL5 참조(MQL5 웹사이트의 탭 - 문서 )의 정보를 적극적으로 사용하고 있습니다. 거의 모든 것을 찾을 수 있습니다. 이 가이드의 큰 단점 중 하나는 이미 다른 프로그래밍 언어에 대한 기본 교육을 받은 사람들을 위해 작성되었지만 분명히 초보자를 위한 것은 아니라는 것입니다. 예를 들어, " Returns "라는 단어로 시작하는 지속적으로 발생하는 구의 의미를 여전히 이해하지 못합니다.

AccountInfoDouble

해당 계정 속성의 두 배 값을 반환 합니다.


누가, 누구에게, 어디로, 어디로, 왜 돌아오는가 ? 오늘날까지도 나는 그것을 이해할 수 없다.

안부 인사를 전합니다. 블라디미르.

Документация по MQL5: Информация о счете / AccountInfoDouble
Документация по MQL5: Информация о счете / AccountInfoDouble
  • www.mql5.com
AccountInfoDouble - Информация о счете - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5