초보자의 모험 - 페이지 3

 
niko :

클라우드브레이커 감사합니다! 이것은 좀 더 재미있어지기 시작했습니다. 저는 여러분이 리턴 내에서 함수를 호출할 수 있다는 것을 몰랐습니다. 보기 좋은 헬리콥터 EC 155! 왜 '다행히', 당신은 당신 자신의 헬리콥터를 원하지 않습니까?

질문 에어로 HC2:


지금까지 내 전략에 대한 3개의 스크립트가 있습니다. 2는 단방향이고 1은 양방향입니다(여기서 작업 중인 것입니다).

MT4에 대한 귀하의 경험에 비추어 볼 때 화면의 5개 정도 쌍(쌍당 1개의 스크립트)에 다른 스크립트를 첨부하면 심각한 문제가 예상됩니까? 하나의 큰 스크립트를 프로그래밍하거나 변경하고 내가 원하는 쌍을 선택하도록 만드는 것보다 나에게 더 쉬울 것입니다(코드를 매일 변경해야 하기 때문에)?

 
niko :

질문 에어로 HC2:


지금까지 내 전략에 대한 3개의 스크립트가 있습니다. 2는 단방향이고 1은 양방향입니다(여기서 작업 중인 것입니다).

MT4에 대한 귀하의 경험에 비추어 볼 때 화면의 5개 정도 쌍(쌍당 1개의 스크립트)에 다른 스크립트를 첨부하면 심각한 문제가 예상됩니까? 하나의 큰 스크립트를 프로그래밍하거나 변경하고 내가 원하는 쌍을 선택하도록 만드는 것보다 나에게 더 쉬울 것입니다(코드를 매일 변경해야 하기 때문에)?

여기에서 통화 쌍에 대한 단일 거래 전략에 대해 이야기하고 있다고 가정합니다. -

나는 내 EA를 쌍 불가지론으로 만드는 것을 선호합니다. 동일한 EX4는 어떤 쌍에도 부착할 수 있습니다.

- 그렇게 하면 유지해야 할 코드베이스가 하나뿐입니다.

- 논리는 가능한 한 단순하게 유지됩니다.

 
cloudbreaker :

여기에서 통화 쌍에 대한 단일 거래 전략에 대해 이야기하고 있다고 가정합니다.

나는 내 EA를 쌍 불가지론으로 만드는 것을 선호합니다. 동일한 EX4는 어떤 쌍에도 부착할 수 있습니다.

- 그렇게 하면 유지해야 할 코드베이스가 하나뿐입니다.

- 논리는 가능한 한 단순합니다.

네, 그게 이상적이겠지만 저는 지표 기반이 아니라 매일 각 통화에 대해 수동 필터를 설정했고 아이디어는 동일하지만 3가지 전략으로 밝혀졌습니다. 이렇게 하면 코드가 정말 이해하기 어려워지고 모든 것을 합친다면 매일 조정하기가 번거롭습니다. 가까운 장래에 필터를 프로그래밍하여 작업 시간을 줄이지 만 프로그래밍 할 수없는 것이 항상 있습니다 (90 %는 프로그래밍되고 나머지는 두뇌가 생각하는 것입니다. 나는 ' '성배' 모든 것을 프로그래밍하고 완벽한 모델을 생각해내려고 하기 전에 엉뚱한 방향을 바라보고 있습니다.


코드가 완료되는 대로 이번 주 월요일에 2가지 전략을 라이브로 출시할 예정입니다. 그들은 시아버지와 나 자신에 의해 약간 수동으로 실행되었으므로 코딩이 더 높은 결과를 가져올 것입니다. Combined 전략 의 경우 동일한 차트에서 2개의 EA를 시작할 수 있습니다(하나는 짧게 길게는 하나). 하지만 여전히 배우고 싶으므로 코딩 프로세스를 다시 시작할 것입니다. 따라서 곧 많은 질문이 올 것으로 기대하십시오!


당신은 어느 나라에 있습니까? 저는 영국 런던에 있습니다.

 

안녕하세요, 클라우드브레이커와 다른 mt4 전문가 여러분!


질문: 2개의 스크립트가 있습니다(하나는 구매용이고 다른 하나는 단락용입니다). 나는 오늘 3 쌍에 둘 다 사용하고 싶었습니다. 이제 차트에는 1EA만 첨부할 수 있으므로 6개의 차트(쌍당 2개)를 열고 스크립트를 첨부했습니다. 그러나 1개의 스크립트만 실행되었습니다. 이유를 모르겠습니다. 어떤 도움을 주시겠습니까?


요약하자면, 2개의 EA, 하나는 다른 하나를 구매하는 것뿐입니다. 공매도, 매우 기본적인 규칙(emas의 황금 십자가, 그게 전부입니다), 이익은 20핍, 손절매 는 없습니다. 왜 1개만 실행되나요? Expert Advisors가 활성화되어 있고 차트에서 모든 스크립트 옆에 웃는 얼굴이 있는지 확인했습니다.

 
niko :

안녕하세요, 클라우드브레이커와 다른 mt4 전문가 여러분!


질문: 2개의 스크립트가 있습니다(하나는 구매용이고 다른 하나는 단락용입니다). 나는 오늘 3 쌍에 둘 다 사용하고 싶었습니다. 이제 차트에는 1EA만 첨부할 수 있으므로 6개의 차트(쌍당 2개)를 열고 스크립트를 첨부했습니다. 그러나 1개의 스크립트만 실행되었습니다. 이유를 모르겠습니다. 어떤 도움을 주시겠습니까?


요약하자면: 2개의 EA, 하나는 다른 하나를 사면 공매도만 하고, 매우 기본적인 규칙(emas에 금색 십자가와 그게 전부입니다), 이익은 20핍, 손절매는 없습니다. 왜 1개만 실행되나요? Expert Advisors가 활성화되어 있고 차트에서 모든 스크립트 옆에 웃는 얼굴이 있는지 확인했습니다.



로그 파일은 무엇을 말합니까? 즉. 하나는 로그 디렉토리에 있고 다른 하나는 전문가 디렉토리에 있습니까?

"Trade Context Busy" 메시지가 표시됩니까? 그렇다면 IsTradeAllowed() 함수 를 사용하는 논리를 추가하는 것이 좋습니다.

그렇지 않은 경우 Print() 문으로 EA를 버리는 것이 좋습니다.

 
cloudbreaker wrote >>

로그 파일은 무엇을 말합니까? 즉. 하나는 로그 디렉토리에 있고 다른 하나는 전문가 디렉토리에 있습니까?

"Trade Context Busy" 메시지가 표시됩니까? 그렇다면 IsTradeAllowed() 함수를 사용하는 논리를 추가하는 것이 좋습니다.

그렇지 않은 경우 Print() 문으로 EA를 버리는 것이 좋습니다.

야 클라우드브레이커! 구하러 와줘서 고마워!

1. 로그 디렉토리는 무엇을 의미합니까? 두 가지 모두에 어떻게 가나요? (C>ProgramFiles>MT4>Experts>Logs를 통해 열려고 시도했지만 폴더가 비어 있는 것으로 표시됩니다.

 
niko wrote >>

야 클라우드브레이커! 구하러 와줘서 고마워!

1. 로그 디렉토리는 무엇을 의미합니까? 두 가지 모두에 어떻게 가나요? (C>ProgramFiles>MT4>Experts>Logs를 통해 열려고 시도했지만 폴더가 비어 있는 것으로 표시됩니다.

야 클라우드브레이커!

나는 이미 여러 번 코딩에 대한 귀하의 의견을 살펴보았고(모든 내용을 내 벽에 게시했습니다), 모두 함께 이해하고 패치하려고 노력했지만 여전히 완전히 길을 잃었습니다. 내가 얻은 것은 다른 EA에서 MyOrderCount 함수를 복사하는 것이지만 이를 코드에 통합하는 방법에 대해서는 아직 모릅니다. 나는 내 깊이에서 완전히 벗어났지만 그것이 우리가 발전할 수 없다는 것을 의미하지는 않습니다. 코드를 조금씩 작성하는 데 도움을 줄 수 있다면(그리고 제가 직접 작성할 수 있는 보다 구체적인 사항으로 안내해 주시면) 코드를 완성하고 훨씬 더 빨리 배울 수 있습니다.

코드를 가능한 한 첨부했고 프로그램 디자인 맵도 내가 보는 방식으로 첨부했습니다. 코드의 대괄호와 같은 사소한 부분에 대해서는 걱정하지 마십시오. 진행하면서 메모장++로 다시 확인하겠습니다.

주요 우선 순위는 MyOrderCount 코드를 나머지 코드에 단계별로 통합하는 데 도움을 줄 수 있는지 여부입니다. 진행하면서 모든 것을 조금씩 설명해주십시오. 또는 적절하다고 생각되는 경우 책의 특정 부분이나 이와 유사한 것을 저에게 보낼 수도 있습니다. 이렇게 하면 훨씬 빠르게 진행됩니다.

고맙습니다!

ps: 프로그램 맵이 첨부되지 않았다면 알려주세요

//+------------------------------------------------------------------+
//|                                     N&P 1DailyUpTrendExec.mq4 |
//| Copyright Nick Lou & Pete Arh 2009                               |
//|                                     20090523                     |
//|                                                                  |
//+------------------------------------------------------------------+

extern double    Lots=0.01;
extern double    TakeProfit=20;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
  return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
  return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if(Bars<75)
     {
     Print("Bars less than 100");
     return(0);
     }
  //-------------------Declaring All Variables and Conditions

double ema1,ema2,ema3,closeup, e1over2, e2over3,e1under2,e2under3;

ema1= iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,0);
ema2= iMA(NULL,0,14,0,MODE_EMA,PRICE_CLOSE,0);
ema3= iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
e1under2=ema1<ema2;
e2under3=ema2<ema3;
e1over2=ema1>ema2;
e2over3=ema2>ema3;
//--------------------declaration end

//-------------order counting code
int CalculateNumberOfOrders(string Symbol)
{
int long=0,short=0;
for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)break;
      if(OrderType()==OP_BUY)long++;
      if(OrderType()==OP_SELL)sell++;
     {
  //---return orders Volume
  if(long>0)return(long);
  if(short>0)return(short);
{
//------------ (fingers crossed this is right). I still don't get it
why we need to count orders.


//------------------EURUSD Block-------------------------
//check order type, if it doesn't equal to buy already then buy
if(OrderType()
     {
    static int ticket;
      // deleted if(OrdersTotal()==0)
     if(e1under2 && e2under3)     // short function
       {
        ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,Bid-TakeProfit*Point,"Short
Order ",0,0,Red);
        if(ticket>0)
              {
              if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SHORT order opened : ",OrderOpenPrice());
              }
              //return(0);
       }

      //  -------------------------------------------------------------------------------------------

      {
      static int ticket1;
            // deleted if(OrdersTotal()==0)
        if(e1over2 && e2over3) //buy function
        {
         ticket1=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,Ask+TakeProfit*Point,"",0,0,Green);
//What's 12345 for? I ADDED ASk-30*Point for stop loss
         if(ticket1>0)
           {
           if(OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
           }
           //return(0);   //the problem is with this return not being
in the right place i think
        }
      }
return(0);
}
}

ps: 코드에 있는 임의의 // 주석을 무시하십시오. 이전 메모에서 가져온 것입니다.

 
niko wrote >>

야 클라우드브레이커!

나는 이미 여러 번 코딩에 대한 귀하의 의견을 살펴보았고(모든 내용을 내 벽에 게시했습니다), 모두 함께 이해하고 패치하려고 노력했지만 여전히 완전히 길을 잃었습니다. 내가 얻은 것은 다른 EA에서 MyOrderCount 함수를 복사하는 것이지만 이를 코드에 통합하는 방법에 대해서는 아직 모릅니다. 나는 내 깊이에서 완전히 벗어났지만, 그것이 우리가 발전할 수 없다는 것을 의미하지는 않습니다. 코드를 조금씩 작성하는 데 도움을 줄 수 있다면(그리고 제가 직접 작성할 수 있는 보다 구체적인 사항으로 안내해 주시면) 코드를 완성하고 훨씬 더 빨리 배울 수 있습니다.

가능한 한 코드를 첨부했으며 내가 보는 방식으로 프로그램 디자인 맵도 첨부했습니다. 코드의 대괄호와 같은 사소한 부분에 대해서는 걱정하지 마십시오. 진행하면서 메모장++로 다시 확인하겠습니다.

주요 우선 순위는 MyOrderCount 코드를 나머지 코드에 단계별로 통합하는 데 도움을 줄 수 있는지 여부입니다. 진행하면서 모든 것을 조금씩 설명해주십시오. 또는 적절하다고 생각되는 경우 책의 특정 부분이나 이와 유사한 것을 저에게 보낼 수도 있습니다. 이렇게 하면 훨씬 빠르게 진행됩니다.

고맙습니다!

ps: 프로그램 맵이 첨부되지 않았다면 알려주세요

ps: 코드에 있는 임의의 // 주석을 무시하십시오. 이전 메모에서 가져온 것입니다.

안녕 니코

이 토론에 2펜스 가치를 더할 수 있습니다.

약간의 교육 및 훈련 경험이 있는 늙고 거의 골동품인 프로그래머로서, 저는 제 시간에 꽤 많은 나쁜 코드를 접했습니다. 잘못 작성된 코드로 이어지는 일반적인 실수 중 하나는 계획 부족입니다. 그것은 명백하게 말할 수 있지만 코딩을 시작하기 전에 무엇을 하고 싶은지 지정해야 합니다. 이것은 추가 작업처럼 보일 수 있지만 장기적으로 많은 시간을 절약하고 더 안정적이고 이해하기 쉽고 유지 관리하기 쉬운 코드를 생성합니다.

컴퓨터 코드를 지정하는 매우 유용한 기술 중 하나는 의사 코딩(Pseudo Coding)으로 알려져 있습니다. 기본적으로 일반 영어로 작성된 지침과 같은 컴퓨터의 논리적 집합입니다. 특정한 형식이 필요한 것은 아니지만 거의 모든 컴퓨터 프로그래밍 언어에서 어떤 형식으로든 발견되는 일반적인 컴퓨터 프로그램 전문 용어를 사용할 수 있습니다.

다음은 치즈와 마카로니 요리를 위한 의사 코드의 예입니다. IBFX 사이트의 "Intro to Programming by Patrick Nouvion" 기사에서 가져왔습니다. 전체 기사는 아마도 읽을 가치가 있습니다. http://www.ibfx.com/ibfxu/catalog/programming/pro1010.aspx

시작
우유와 버터와 크래프트 상자 찾기
발견되면 계속
그렇지 않으면 가게에 아이를 보내

컵 보드에서 냄비 찾기

찾으면 계속해서 아내에게 찾는 데 도움을 요청하십시오.

스토브 찾기
발견되면 계속
그 외 피자 주문

사용 가능한 버너 확인
사용 가능한 경우 계속
그렇지 않으면 이용하다

스토브를 높음으로 켜십시오.
물 찾기
발견되면 계속
그 외 피자 주문

냄비에 물을 넣어
스토브가 뜨거운지 확인하십시오.
뜨거운 경우 계속
그렇지 않으면 연결되어 있는지 확인하십시오.
그렇지 않으면 수리공에게 전화를 걸어 피자를 주문하십시오.

버너에 냄비를 놓고
소금이 있다면 소금 한꼬집을 넣어주세요
계속하지 않으면
후추가 있으면 후추 한 꼬집 추가
계속하지 않으면
물이 끓지 않는 동안 기다리십시오
크래프트 상자 열기
상자에서 냄비에 마카로니를 추가
8분 기다려
기다리는 동안 냄비가 끓어오르면 불을 줄이고 불을
소쿠리 찾기
소쿠리에 마카로니 물기 빼기
냄비에 반환
치즈팩 내용물 추가
버터를 추가
우유 1큰술을 넣는다
결합하기 위해 저어
너무 걸쭉하면 우유 1큰술을 추가하십시오. 그렇지 않으면 먹다

이 의사 코드를 직접 작성하는 경우 기능 블록으로 분할하고 약간의 들여쓰기를 사용하여 "예쁘게 보이도록"하여 좀 더 다듬을 것입니다. 예를 들어

시작 블록 - 끓는 물 준비

냄비에 물을 넣어

버너에 냄비를 놓고
소금이 있다면 소금 한꼬집을 넣어주세요
계속하지 않으면
후추가 있으면 후추 한 꼬집 추가
계속하지 않으면
물이 끓지 않는 동안 기다리십시오

END BLOCK - 볼링 워터 준비

등등....

Niko, 자신만의 코드 작성 방법을 배우고 싶어하는 당신을 칭찬합니다. 내 경험상 가장 빠르고 쉬운 학습 방법은 하고 있는 일을 하고 해보는 것입니다. 하지만 제가 제안하고 싶은 것은 잠시 뒤로 물러나서 의사 코드에서 달성하고자 하는 것을 작성하는 것입니다. 이것은 당신이 달성하려는 것이 정확히 무엇인지에 대한 생각을 명확하게 하는 데 도움이 될 것입니다.

작업을 마치면 저나 다른 사람이 볼 수 있도록 여기에 다시 게시할 수 있습니다. 의사 코드가 맞다면 MT4 코드로 변환을 시작할 수 있습니다. 한 번에 모든 것을 하려고 하는 것은 특히 초보자일 때 너무 큰 도약입니다.

그건 그렇고, 내 의사 코드는 결코 낭비되지 않습니다. 대부분은 완성된 코드에서 주석으로 끝납니다.

행운을 빕니다!

팀 윌슨

 
niko :

야 클라우드브레이커!

나는 이미 여러 번 코딩에 대한 귀하의 의견을 살펴보았고(모든 내용을 내 벽에 게시했습니다), 모두 함께 이해하고 패치하려고 노력했지만 여전히 완전히 길을 잃었습니다. 내가 얻은 것은 다른 EA에서 MyOrderCount 함수를 복사하는 것이지만 이를 코드에 통합하는 방법에 대해서는 아직 모릅니다. 나는 내 깊이에서 완전히 벗어났지만 그것이 우리가 발전할 수 없다는 것을 의미하지는 않습니다. 코드를 조금씩 작성하는 데 도움을 줄 수 있다면(그리고 제가 직접 작성할 수 있는 보다 구체적인 사항으로 안내해 주시면) 코드를 완성하고 훨씬 더 빨리 배울 수 있습니다.

코드를 가능한 한 첨부했고 프로그램 디자인 맵도 내가 보는 방식으로 첨부했습니다. 코드의 대괄호와 같은 사소한 부분에 대해서는 걱정하지 마십시오. 진행하면서 메모장++로 다시 확인하겠습니다.

주요 우선 순위는 MyOrderCount 코드를 나머지 코드에 단계별로 통합하는 데 도움을 줄 수 있는지 여부입니다. 진행하면서 모든 것을 조금씩 설명해주십시오. 또는 적절하다고 생각되는 경우 책의 특정 부분이나 이와 유사한 것을 저에게 보낼 수도 있습니다. 이렇게 하면 훨씬 빠르게 진행됩니다.

고맙습니다!

ps: 프로그램 맵이 첨부되지 않았다면 알려주세요

ps: 코드에 있는 임의의 // 주석을 무시하십시오. 이전 메모에서 가져온 것입니다.

간단히 살펴보면 당신이 근본적인 실수를 하고 있음을 알 수 있습니다.

start() 함수의 코드 블록 내에서 MyOrderCount() 함수를 선언하려는 것 같습니다.

코드를 일련의 함수 init(), start(), yourfunction1(), yourfunction2() ... yourfunctionN()으로 생각하십시오.

init() 및 start() 함수는 특수 함수입니다. init() 함수는 EA를 처음 초기화할 때 한 번 실행됩니다. start() 함수는 들어오는 틱이 도착할 때마다 실행됩니다.

따라서 start() 함수는 EA가 실행되고 실행되면 모든 논리가 호출되는 루트를 형성합니다.

예를 들어, 틱이 도착할 때마다 start() 함수가 실행되고 다음을 수행합니다.

- 일부 조건 확인

- 조건이 충족되면 명령을 수행합니다.

필요한 조건 중 하나는 구매 주문 을 하기 전에 해당 유형의 주문(예: 구매)이 없는지 확인하는 것입니다.

따라서 start() 함수 내에서 구매 주문 카운팅 함수(start() 함수 외부에 있는 코드 블록)에 대한 호출에 의해 어떤 구매 주문이 존재하는지 알아내야 합니다.

주문 계산 함수는 구매 주문 수를 반환하고 구매 주문 계산 함수를 호출한 후 라인에서 start() 함수의 실행을 재개합니다.

그런 다음 구매 주문 계산 기능에서 반환된 값을 사용하여 구매 주문을 실행할지 여부를 결정합니다.

구매 주문의 실제 실행은 스스로 생성한 다른 함수에 대한 호출일 수 있습니다(다시, start() 함수 외부에서 선언됨).

이것이 의미가 있기를 바랍니다. 완전히 다르게 구조화할 수 있지만 저는 함수와 호출의 개념을 이해하려고 합니다.


CB

 

안녕하세요 TSWilson과 CB입니다!

너희들 대단해! 정말 감사합니다.

의사 코드에 대해 완전히 파악하십시오. 저는 pro**realtime 언어로 아주 기본적인 프로그래밍을 할 때 이 작업을 수행했지만 거기에는 너무 간단하고 선언, 블록 등이 없었습니다(전체 코드는 'if...then' 하하). 나는 오늘 아침에 의사 코드를 시작했고(그것을 하기 위해 한 시간 일찍 일해야 했다) 어떻게 그리고 어떤 블록을 가질 것인지에 대한 시각적 다이어그램을 작성했습니다. 오늘 중으로 끝내고 여기에 올립니다.

이 작업이 완료되면 나머지 블록과 코드의 세부 사항은 여러분의 도움을 받아 알아낼 수 있습니다. 이제 도면 보드로 돌아가십시오!

다음 주에 휴가를 떠나 모든 준비를 마치고 가기 전에 코드를 최대한 빨리 완성하기 위해 오늘과 내일 밤을 새워 일하게 되어 기쁩니다.

그래서 오늘 이 스레드를 계속 시청하십시오. 저는 의사 코드와 다이어그램을 게시할 것입니다!

그리고 언제나처럼, 당신과 같은 사람들을 위해 우주에 감사드립니다!