커스텀 원하는 금액 이상이 되면 액션을 이동할 수 있는 커스텀 모듈 만들기. (코인, 주식, 선물 매매 호가창 비교 분석.)
페이지 정보
본문
안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 에디터에서 [ OCR 체크 ]와 [ 변수 ] 그리고, [ 숫자 체크 ] 액션을 이용해서 주식 또는 코인의 호가창을 모니터링할 수 있습니다. 하지만, 복잡하게 로직을 구성해야 하는 경우 여러가지 액션을 사용해서 복잡도를 올릴 필요는 없죠^^; 그래서, 내가 매매할 금액을 설정하고 호가창에서 주식이나 코인 가격이 설정한 금액보다 크거나 작으면 매매할 수 있는 커스텀 모듈을 만들어봤습니다.
실시간으로 변화하는 코인 가격을 체크하고 있습니다. 설정 값은 79,950,000원입니다. 이 값보다 코인 가격이 크면 True로 이동하게 됩니다. 현재 이 글을 작성하고 있는 시점에 코인이 8천만원을 넘어섰네요. 코인에 투자하시는 분들은 정말 엄청난 수익을 내고 있을거 같아 부럽습니다^^; 자동 매매 관련된 내용은 홈페이지에 많이 있으므로, 참고하셔서 스크립트를 완성하면 됩니다. 이 커스텀 모듈을 만들기 위한 전체 코드는 아래와 같습니다.
using NGM.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CustomNumberCheckModule
{
[Serializable]
public class NumberCheckModel : NGM.Models.Interface.BaseCustomConditionFunctionModel
{
/// <summary>
/// 도구 상자에 표시될 카테고리 이름을 가져옵니다.
/// </summary>
public override string DisplayCategory => "NGMsoftware";
/// <summary>
/// 도구 상자에 표시될 액션 이름을 가져옵니다.
/// </summary>
public override string DisplayName => "숫자 체크 타이머";
private Rectangle ControlWindowRectangle { get; set; }
[Category("Data")]
[DisplayName("결과 값")]
[Description("사용자가 설정한 조건에 맞는 값을 표시합니다.")]
[Browsable(true)]
[DefaultValue(0)]
[ReadOnly(true)]
public double Result { get; set; }
/// <summary>
/// 최대값 최소값을 계산하기 위해 데이터를 수집하는 시간입니다.
/// </summary>
[Category("Action")]
[DisplayName("판단 시간")]
[Description("설정한 시간동안 숫자를 판단합니다. 제한 시간 없이 판단하려면 -1을 입력하세요. (단위: 초)")]
[Browsable(true)]
[DefaultValue(60)]
public int CheckTime { get; set; } = 60;
[Category("Action")]
[DisplayName("모델 선택")]
[Description("문자 판독에 사용되는 모델을 선택합니다.")]
[Browsable(true)]
[DefaultValue(typeof(NGM.Definition.OcrModel), "Normal")]
public NGM.Definition.OcrModel ModelOption { get; set; } = NGM.Definition.OcrModel.Normal;
[Category("Action")]
[DisplayName("OCR 영역")]
[Description("OCR 문자 판독 영역을 설정하세요.")]
[Browsable(true)]
[DefaultValue(typeof(System.Drawing.Rectangle), "0,0,0,0")]
[Editor(typeof(NGM.Models.TypeEditor.AreaCaptureEditor), typeof(System.Drawing.Design.UITypeEditor))]
public Rectangle SearchArea { get; set; }
[Category("Action")]
[DisplayName("비교 값")]
[Description("인식한 숫자 값이 이 값보다 크면 같음(True) 속성에 설정한 아이디로 이동합니다.")]
[Browsable(true)]
[DefaultValue(0.0)]
public double CheckNumber { get; set; }
public override bool? Execute(IMainView mainView, IPlayer player)
{
if (SearchArea.IsEmpty)
{
mainView.WriteOutput("필수 입력값이 누락되었습니다. OCR 영역을 선택하세요.");
return null;
}
Image Target = null;
Result = 0;
DateTime checkTime = DateTime.Now;
if (CheckTime < 0)
checkTime = DateTime.MaxValue;
else
checkTime = DateTime.Now.AddSeconds(CheckTime);
while (checkTime > DateTime.Now)
{
if (player.MainHandle == IntPtr.Zero)
Target = NGM.Utility.ScreenCaptureManager.ScreenShot.GetActiveImage(SearchArea, player);
else
Target = NGM.Utility.ScreenCaptureManager.ScreenShot.GetInactiveImage(player, ControlWindowRectangle, SearchArea, true);
if (Target == null)
continue;
string number = NGM.Utility.OCRManager.Converter.ImageToText(
(Image)Target.Clone(),
NGM.Definition.Language.English,
ModelOption,
NGM.Definition.TesseractEngine.Default,
NGM.Definition.PageSegMode.SingleBlock,
false,
null,
null);
Target?.Dispose();
Target = null;
if (!string.IsNullOrEmpty(number) && double.TryParse(System.Text.RegularExpressions.Regex.Replace(number, @"[^0-9.]", ""), out double n))
{
if (n > CheckNumber)
{
Result = n;
return true;
}
}
}
return false;
}
}
}
커스텀 모듈 사용 방법을 모르시는 분은 [ 여기 ] 학습 및 예제를 참고하세요.
커스텀 모듈을 다운로드 하려면 [ 여기 ]를 참고하세요.
이 커스텀 모듈을 약간 손보면 서버 시간과 동기화해서 뭔가 실행할 수 있는 모듈을 만들 수 있을겁니다. 네이버 시계나 엔코 시계를 판독하면 됩니다. 제 컴퓨터 기준으로 1분에 약 470회 정도 문자를 판독해서 읽어들일 수 있었습니다. 만약, 플레이어로 한다면 500회 이상 체크해서 루틴을 이동할 수 있겠죠^^;
개발자에게 후원하기
추천, 구독, 홍보 꼭~ 부탁드립니다.
여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~
감사합니다~
- 이전글업비트 오픈 API 또는 프라이빗 API를 사용하기 위한 접근 권한 토큰 만드는 방법. (How to create an access token to use Upbit Open API or Private API.) 21.12.08
- 다음글주식, 선물, 비트 코인 시세 분석 커스텀 매크로 만들기. (특정 시간 동안 최대값, 최소값, 평균등등... 통계적 접근 및 분석) 21.11.03
댓글목록
등록된 댓글이 없습니다.