안녕하세요. 나는 자동화하고 싶고 그렇게하려고 시도했다는 생각을 가지고있다. 그러나 나는 똑똑한 프로그래머들이 올바른 방향으로 나를 가리켜 서이 작업을 의도 한대로 할 수 있기를 바랍니다.

여기에 논리가 있습니다.

차트에 거래가없는 동안 EA는 아무 것도하지 않습니다. 당신 (상인)이 수동으로 거래를 열 것입니다.

새로운 거래가 차트에 열렸다는 것을 알게되면 EA는 살아남을 것입니다.

그것은 그것이 매수인지 또는 매도인지를 알 수 있습니다. (그것은 똑같은 일을하지만 구매 대 판매의 반대입니다)

이 특정 인스턴스에 대한 구매라고 가정 해보십시오. 그러면 EA는 Yof 로트에 대한 현재 오픈 교환보다 Xpips 구매 보류 중 하나를 열게됩니다. 여기에서 두 가지 중 하나가 발생할 수 있습니다.

옵션 1 : 가격이 사용 가능한 거래에 대해 이동합니다. 공개 거래가 중단됩니다. = gt; 이 경우 보류중인 주문을 종료하고 다시 잠자기 상태로 되돌아갑니다.

옵션 2 : 가격이 유리하게 움직이고 보류중인 주문이 실행됩니다. = gt; 이 시나리오에서 : 이전과 동일한 매개 변수를 사용하여 새로운 보류 주문을 엽니 다 (EA는 Yof 로트의 현재 열려있는 교환보다 보류중인 구매 Xpips를 열 것입니다).

이것은 끝없이 계속됩니다. (트랜잭션을 종료하는 별도의 코드가 있음)

내 코드는 다음과 같습니다. 여러분이 무엇을 바꾸거나 다르게 할 수 있는지 알려주세요. 나는 프로그래머가 아니기 때문에 제안에 매우 개방적이다.

-- 고맙습니다!!! -

삽입 된 코드/p --------------------------------------------- --------------------- /| LeverageIn001.mq4 |/| Copyright 2018, |/| http://www.forum.com/platanero |/p ----------------------------------------------- ------------------- #property copyright 저작권 2018, #property 하이퍼 링크 http://www.forum.com/platanero #property 버전 1.00 #property stringent/- - 매개 변수를 입력하십시오. double Lots = 0.01; int를 입력하십시오. StopLoss = 50; int를 입력하십시오 거리 = 30; int Magic = 39573;을 입력하십시오. 이중 PipPoint; bool parSet; bool sellonly; 바이 아웃 바이 아웃; bool pendingOpened;/p ----------------------------------------------- ------------------- /| 전문가 초기화 서브 |/p ----------------------------------------------- ------------------- int OnInit ()/- if (Digits lt; 4) PipPoint = 0.01; 그렇지 않으면 PipPoint = 0.0001;/- return (INIT_SUCCEEDED);/p ----------------------------------------------- ------------------- /| 전문가 초기화 기능 |/ ----------------------------------------------- ------------------- emptiness OnDeinit (const int reason)/-/p ---------------- -------------------------------------------------- /| 전문가 눈금 기능 |/ ----------------------------------------------- ------------------- void OnTick ()/- if (parSet == 확실한 OrdersTotal () == 0) OrderType () == OP_SELLSTOP) OrderDelete ( OrderTicket ()); if (OrdersTotal () == 0)///이 조건이 충족되면 현재 열려있는 주문이 없기 때문입니다. 모든 레벨은 false로 설정됩니다. parSet = false; buyonly = 거짓; sellonly = 거짓; if (OrdersTotal () gt; 0 parSet! = true)//이 조건이 충족되면 미결 주문이 있습니다. (int a = 0; alt; OrdersTotal (); a ) OrderSelect (a, SELECT_BY_POS, MODE_TRADES);///구매 주문서가 열리면 다음과 같이 설정하십시오. if (OrderType () == OP_BUY OrderCloseTime () == 0) buyonly = true; sellonly = 거짓; parSet = true;///판매 주문이 발견 된 경우 레벨을 다음과 같이 설정합니다. if (OrderType () == OP_SELL OrderCloseTime () == 0) buyonly = false; sellonly = 사실; parSet = true; (int a = 0; alt; OrdersTotal (); a )에 대해 (buyonly = true pendingOpened!) = true) OrderSelect (a, SELECT_BY_POS, MODE_TRADES);///보류중인 주문이 있음을 발견하면 종료하십시오. 그렇지 않으면 하나를 엽니 다. 만약 (OrderType () == OP_BUYSTOP OrderCloseTime () == 0) return; else int ticket = OrderSend (Symbol (), OP_BUYSTOP, Lots, (GetAsk () (Distance * PipPoint)), 3, StopLoss, 0, My order, Magic, 0, clrGreen); pendingOpened = true;(int a = 0; alt; OrdersTotal (); a )에 대해 (sellonly = true pendingOpened!) = true) OrderSelect (a, SELECT_BY_POS, MODE_TRADES);///보류중인 주문이 있음을 발견하면 종료하십시오. 그렇지 않으면 하나를 엽니 다. 만약 (OrderType () == OP_SELLSTOP OrderCloseTime () == 0) return; else int ticket = OrderSend (Symbol (), OP_SELLSTOP, Lots, (GetBid (Distance * PipPoint)), 3, StopLoss, 0, My order, Magic, 0, clrGreen); pendingOpened = true;/---------- ------------------------------------------- ----------------------- /| |/ ----------------------------------------------- ------------------- double GetBid () return (NormalizeDouble (MarketInfo (Symbol (), MODE_BID), Digits)));/ ----------------------------------------------- ------------------- /| |/ ----------------------------------------------- ------------------- double GetAsk () return (NormalizeDouble (MarketInfo (Symbol (), MODE_ASK), Digits)));