아사르

 

나는 내 EA를 구축하기 위해 사람들에게 돈을 지불하는 것을 마쳤습니다. 드디어 내가 직접 할 때가 왔다.

ASAR(ATR Stop And Reverse)이라는 템플릿을 추가로 만들고 싶지만 이것이 첫 번째 EA가 될 것이기 때문에 어떻게 시작해야 할지 잘 모르겠습니다. 수정되지 않은 템플릿은 ATR 로트 크기 조정이 있는 ATR 후행 정지(역방향)이기 때문에 시장 개장부터 시장 마감까지 일주일 내내 논스톱으로 실행됩니다. 따라서 시장이 열렸을 때 거래 시작 신호는 단순히 이전 막대 방향으로 열리는 것입니다(이는 이전 시장 마감 의 마지막 막대가 될 것입니다). 이것은 주 초에 한 번만 발생하므로 스크립트가 필요합니까?

이것을 코딩하는 방법을 알아내려면 어떻게 해야 합니까?

나는 코딩 과정을 통해 사람을 데려가는 예를 보았지만 그러한 예의 문제는 제시되지 않은 것을 알아내는 방법을 실제로 사람에게 보여주지 않는다는 것입니다. 예를 들어 MetaQuotes의 MQL4 책은 특정 예제와 함께 기본을 설명하는 데 능숙하지만 내가 읽은 모든 내용에서 초기 코딩을 알아낼 수 있게 해주는 정보를 접한 기억이 없습니다. 템플릿으로 선택한 거래 신호.

 
ASAR :

이것을 코딩하는 방법을 알아내려면 어떻게 해야 합니까?

코딩이 쉬운 부분이라는 것을 깨달은 것 같습니다. . . 코딩 방법, 변수 유형, 코드 구문이 무엇인지 배울 수 있습니다. . . 그러나 여기서 질문하는 것은 문제 해결입니다. 그것은 가르치는 것이 훨씬 더 어렵습니다. . .

내가 당신에게 줄 수 있는 최선의 조언은 당신이 하고 싶은 일을 적는 것입니다. . . 그런 다음 수동 거래 라면 어떻게 할 것인지 기록해 두십시오. . . 그런 다음 MT4에서 완전한 초보자를 보여주는 것처럼 이 단계를 확장하십시오. . . 그러면 코딩할 수 있는 무언가가 생깁니다.

 
RaptorUK :

코딩이 쉬운 부분이라는 것을 깨달은 것 같습니다. . . 코딩 방법, 변수 유형, 코드 구문이 무엇인지 배울 수 있습니다. . . 그러나 여기서 질문하는 것은 문제 해결입니다. 그것은 가르치는 것이 훨씬 더 어렵습니다. . .

내가 당신에게 줄 수 있는 가장 좋은 조언은 당신이 하고 싶은 일을 적는 것입니다. . . 그런 다음 수동 거래라면 어떻게 할 것인지 기록해 두십시오. . . 그런 다음 MT4에서 완전한 초보자를 보여주는 것처럼 이 단계를 단계적으로 확장하십시오. . . 그러면 코딩할 수 있는 무언가가 생깁니다.


알겠습니다. 그렇게 하겠습니다.

조언 감사합니다. 이것은 확실히 모험이 될 것입니다.

 

좋아, 나는 이전 막대의 방향으로 열리는 문제를 해결했습니다.

(Bar 1 Close > Bar 1 Open, OP_BUY)

(Bar 1 Close < Bar 1 Open, OP_SELL)

이제 이전 주문이 마감될 때 주문을 여는 코드가 있는지 궁금합니다.

 
ASAR :

좋아, 나는 이전 막대의 방향으로 열리는 문제를 해결했습니다.

(Bar 1 Close > Bar 1 Open, OP_BUY)

(Bar 1 Close < Bar 1 Open, OP_SELL)

이제 이전 주문이 마감될 때 주문을 여는 코드가 있는지 궁금합니다.


이것은 mq4에서 쓰는 방식이 될 수 없습니다.

이전 주문이 마감될 때 주문을 여는 코드가 있는지 궁금해할 필요가 없습니다.

하는 방법만 알면 됩니다...

주문 기록에서 EA의 마지막 마감된 거래를 찾은 다음 해당 주문openprice 및 ordercloseprice 및 ordertype을 확인해야 합니다.

 

고맙습니다.

나는 단지 나를 올바른 방향으로 인도하기 위해 어떤 종류의 단서가 필요했고 당신이 제공한 정보는 아마도 나를 위해 그렇게 할 것입니다.

 

자, 이것은 제가 Expert Advisor Builder 사이트에서 첫 거래를 열기 위해 생성한 코드입니다.

//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder                  |
//|                http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//|                                                                  |
//|  In no event will author be liable for any damages whatsoever.   |
//|                      Use at your own risk.                       |
//|                                                                  |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link      " http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ "
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.01;
extern int Slippage = 3;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = True;
extern int TrailingStop = 30;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
   BarCount = Bars;
   if (EachTickMode) Current = 0; else Current = 1;
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
   int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;
 
   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;
   //+------------------------------------------------------------------+
   //| Variable Begin                                                   |
   //+------------------------------------------------------------------+
double Buy1_1 = iClose(NULL, 0, Current + 1);
double Buy1_2 = iOpen(NULL, 0, Current + 1);
double Sell1_1 = iClose(NULL, 0, Current + 1);
double Sell1_2 = iOpen(NULL, 0, Current + 1);
 
   
   //+------------------------------------------------------------------+
   //| Variable End                                                     |
   //+------------------------------------------------------------------+
   //Check position
   bool IsTrade = False;
   for (int i = 0; i < Total; i ++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) {
         IsTrade = True;
         if(OrderType() == OP_BUY) {
            //Close
            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Buy)                                           |
            //+------------------------------------------------------------------+
            
            //+------------------------------------------------------------------+
            //| Signal End(Exit Buy)                                             |
            //+------------------------------------------------------------------+
            if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                 
               if(Bid - OrderOpenPrice() > Point * TrailingStop) {
                  if(OrderStopLoss() < Bid - Point * TrailingStop) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         } else {
            //Close
            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Sell)                                          |
            //+------------------------------------------------------------------+
            
            //+------------------------------------------------------------------+
            //| Signal End(Exit Sell)                                            |
            //+------------------------------------------------------------------+
            if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                 
               if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                  if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
      }
   }
   //+------------------------------------------------------------------+
   //| Signal Begin(Entry)                                              |
   //+------------------------------------------------------------------+
   if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;
   if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;
   //+------------------------------------------------------------------+
   //| Signal End                                                       |
   //+------------------------------------------------------------------+
   //Buy
   if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }
         if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
         Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print("BUY order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
   } else {
    Print("Error opening BUY order : ", GetLastError());
   }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }
   //Sell
   if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }
         if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
         Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print("SELL order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
   } else {
    Print("Error opening SELL order : ", GetLastError());
   }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }
   if (!EachTickMode) BarCount = Bars;
   return(0);
}
//+------------------------------------------------------------------+


And this is a loop that's been suggested to me that I'd like to add but am unsure of where to apply it.
 

for(int i=0;i < OrdersHistoryTotal() ;i++)
  {
   OrderSelect(i, 
SELECT_BY_POS)
   
   if (OrderMagicNumber() == InstanceID)
  
lastClosedDirection = OrderType() ;
  }

Can anyone tell me where this should be applied? 
 
ASAR :

자, 이것은 제가 Expert Advisor Builder 사이트에서 첫 거래를 열기 위해 생성한 코드입니다.

오 이런 . . . 이 게시물과 스레드의 나머지 부분을 읽으십시오: https://www.mql5.com/en/forum/139608
 
ASAR :

그리고 이것은 내가 추가하고 싶지만 어디에 적용할지 확신이 서지 않는 제게 제안된 루프입니다.

그 코드는 무엇을 합니까? InstanceID는 무엇입니까? lastClosedDirection으로 무엇을 하시겠습니까?
 
Expert Advisor Builder 코드를 사용하려면 해당 포럼으로 이동하여 도움을 받는 것이 좋습니다. http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/forum/viewforum.php?f=4
 
ASAR :

자, 이것은 제가 Expert Advisor Builder 사이트에서 첫 거래를 열기 위해 생성한 코드입니다.

내가 대학에 다닐 때 컴퓨팅에 대한 첫 번째 강의는 강사가 인사하는 것이었습니다. 그런 다음 그는 "책을 사서 계속하십시오"라고 말했습니다. "문제가 있는 경우 랩 세션이 있을 것이며 대학원생에게 물어볼 수 있습니다." - 이 랩 세션 동안 도움이 필요합니다. 당신은 컴퓨팅을 가르치는 경향이 없습니다. 당신은 그 사람이 배울 수 있습니다. C 프로그래밍 언어를 정의하는 책의 첫 번째 프로그램 중 하나는 화면에 "HELLO WORLD"를 쓰는 것입니다. 1000줄짜리 프로그램이 주어지지 않고 변경하라고 하는 데는 이유가 있습니다!

이것을 Expert Adviser Builder라고 하는 것은 EA를 만들고 돈을 위해 거래하는 것에 대해 진지한 사람이라면 누구에게나 책임이 있습니다. EA에 있는 모든 코드 라인을 보고 그것이 무엇을 하는지, 왜 하는지 알 수 있어야 합니다. 나는 다른 사람의 코드를 사용하지 않을 것입니다. 그들이 하는 일을 보고 꼭 비슷한 일을 하십시오. 그러나 진지하게 생각한다면 모든 줄을 직접 작성하십시오.

그리고 EA 빌더 코드는 좋은 코드 IMHO가 아닙니다.

사유: