[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 10

 
tol64 :
말해봐, 손절매를 설정할 가능성을 프로그래밍 방식으로 결정할 수 있는지/ 포지션을 열 때/보류 주문 을 할 때 또는 그 후에 즉시 이익을 얻을 수 있습니까?


설정 정지 및 이익의 수준을 미리 확인하십시오.

MarketInfo() 함수에 사용된 요청 식별자입니다. 다음 값 중 하나일 수 있습니다.

끊임없는 의미 설명
모드_낮음 하나 최소 일일 가격
MODE_HIGH 2 최대 일일 가격
MODE_TIME 5 마지막 견적 접수 시간
MODE_BID 아홉 마지막으로 받은 입찰 가격입니다. 현재 상품의 경우 사전 정의된 변수 Bid 에 저장됩니다.
모드_ASK 마지막으로 받은 판매 가격입니다. 현재 기호의 경우 미리 정의된 변수 Ask 에 저장됩니다.
MODE_POINT 열하나 견적 통화의 포인트 크기. 현재 도구의 경우 사전 정의된 변수 Point 에 저장됩니다.
MODE_DIGITS 12 상품 가격의 소수점 이하 자릿수입니다. 현재 기기의 경우 사전 정의된 변수 Digits 에 저장됩니다.
MODE_SPREAD 열셋 포인트로 퍼짐
MODE_STOPLEVEL 십사 최소 허용 손절매/이익 실현 수준(핍)
MODE_LOTSIZE 열 다섯 상품 기준 통화의 계약 규모
MODE_TICKVALUE 열여섯 예금 통화로 표시된 상품 가격의 최소 변동 금액
MODE_TICKSIZE 17 견적 통화로 상품 가격을 변경하기 위한 최소 단계
MODE_SWAPLONG 십팔 롱 포지션을 위한 스왑 사이즈
모드_스왑쇼트 십구 숏 포지션을 위한 스왑 사이즈
MODE_STARTING 20 달력 거래 시작 날짜(보통 선물에 사용됨)
MODE_EXPIRATION 21 달력 거래 종료일(보통 선물에 사용)
MODE_TRADEALLOWED 22 지정된 상품에 대한 거래 허가
MODE_MINLOT 23 최소 로트 크기
MODE_LOTSTEP 24 로트 크기 단계
MODE_MAXLOT 25 최대 로트 크기
MODE_SWAPTYPE 26 스왑 계산 방법. 0 - 포인트; 1 - 상품의 기본 통화로, 2 - 백분율로; 3 - 담보 통화로.
MODE_PROFITCALCMODE 27 이익 계산 방법. 0 - 외환; 1 - CFD; 2-선물
MODE_MARGINCALCMODE 28 담보 계산 방법. 0 - 외환; 1 - CFD; 2 - 선물; 3 - 지수에 대한 CFD
MODE_MARGININIT 29 1 lot에 대한 초기 보안 요구 사항
MODE_MARGIN유지 관리 서른 1랏당 오픈 포지션을 지원하기 위한 담보 금액
MODE_MARGINHEDGED 31 1랏당 클로즈드 포지션에서 부과되는 마진
MODE_MARGIN필수 32 구매를 위해 1랏을 여는 데 필요한 무료 자금의 양
MODE_FREEZELEVEL 33 포인트 단위로 동결 수준을 주문하십시오. 실행 가격이 동결 수준에 의해 결정된 한도 내에 있는 경우 주문을 수정, 취소 또는 마감할 수 없습니다.

 
SeALALex :

여러분, 안녕하세요! 저는 일반 표준 지표에 대한 많은 최초의 Expert Advisors와 마찬가지로 Expert Advisors를 작성하는 방법을 배우고 있습니다. 방금 작성했습니다. 이제 작업이 복잡해졌지만 코드가 어떻게 생겼는지 모르겠습니다. 일반적으로 조건이 생겼을 때 포지션이 열리고 닫힐 때 같은 조건을 유지하면서 테이크업을 한다고 하면 새로운 포지션이 열리지 않고 반대의 조건이 생겼을 때만 열리도록 만드는 방법 , 등. 감사해요!!!


도움말에 거의 준비된 예 준비된 예가 있습니다.

 int i,accTotal=OrdersHistoryTotal();
  for(i=0;i<accTotal;i++)
    {
     //---- 선택 결과 확인
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==거짓)
       {
        Print("기록 데이터베이스에 액세스하는 동안 오류가 발생했습니다(",GetLastError(),")");
        부서지다;
       }
주문 마감 시간을 기억해야 합니다. 
주문 마감 시간을 이전 반복의 마감 시간과 비교
if (마감 시간이 더 길고 거래 유형이 매수 또는 매도인 경우)
그런 다음 현재 주문 시간과 거래 유형을 기억하십시오.  
// 결과적으로 사이클이 끝날 때 마지막으로 마감된 주문 유형을 알 수 있습니다. 
    }
이 같은 .

 
ivandurak :


설정 정지 및 이익의 수준을 미리 확인하십시오.


이 목록에는 특정 유형의 계정에 대한 확인이 없습니다. 다음은 NDD 계정에 대한 거래 규칙의 한 단락입니다.

3.3. Expert Advisor를 사용하여 클라이언트 터미널을 통해 포지션을 열면 클라이언트는 손절매 및/또는 이익실현 주문 수준을 지정할 수 없습니다. 고객이 이러한 주문을 하기를 원하는 경우 5.16 - 5.22 및 9.13 - 9.16 조항에 따라 기존 위치를 수정할 수 있습니다.

프로그래밍 방식으로 확인할 수 있는지 궁금합니다. 제가 이해하기로는 아닙니다. 프로그램에서 처음에는 브로커가 설정한 조건을 고려하여 포지션 개설/보류 주문 기능을 작성해야 합니다.
 
tol64 :


이 목록에는 특정 유형의 계정에 대한 확인이 없습니다. 다음은 NDD 계정에 대한 거래 규칙의 한 단락입니다.

프로그래밍 방식으로 확인할 수 있는지 궁금합니다. 제가 이해하기로는 아닙니다. 프로그램에서 처음에는 브로커가 설정한 조건을 고려하여 포지션 개설/보류 주문 기능을 작성해야 합니다.

어떻게 든 주문 규칙이 완전히 명확하지 않습니다. 가능한 것과 불가능한 것을 데모에서 플레이해 보십시오. 내가 이해하는 한, 프로그래밍 방식으로 주문하고 수정하는 것을 막을 수 있는 것은 아무것도 없습니다. 포지션을 개설한 후 연결을 끊고 중단 없이 두지 않는 한 권리는 어쩐지 이상합니다.
 
tol64 :


이 목록에는 특정 유형의 계정에 대한 확인이 없습니다. 다음은 NDD 계정에 대한 거래 규칙의 한 단락입니다.

프로그래밍 방식으로 확인할 수 있는지 궁금합니다. 제가 이해하기로는 아닙니다. 프로그램에서 처음에는 브로커가 설정한 조건을 고려하여 포지션 개설/보류 주문 기능을 작성해야 합니다.

문제 없습니다. 심지어 (개인 용도가 아닌 경우, 자신이 어떤 계정(거래 조건 및 누구로부터)을 사용해야 하는지 알고 있기 때문에), 그러나 귀하가 조언자를 주문하고 클라이언트 자신이 아직 어떤 계정과 위치를 결정하지 않은 경우 한 번에 가져 와서 중지를 설정할 수있는 유형의 계정에서도 사용하면 기본적으로 모든 유형의 주문을 설치할 때 이러한 수준의 값이 0 인 고문을 만든 다음 수정합니다 (작동합니다 모든 유형의 주문 및 특정 사무실의 중지 및 인수 수준을 설정하고 후속 수정하는 옵션을 사용하여 거래 작업을 수행할 때 아무도 확인 요구 사항 및 제한을 취소하지 않았습니다.
 
ivandurak :

어떻게 든 주문 규칙이 완전히 명확하지 않습니다. 가능한 것과 불가능한 것을 데모에서 플레이해 보십시오. 내가 이해하는 한, 프로그래밍 방식으로 주문하고 수정하는 것을 막을 수 있는 것은 아무것도 없습니다.포지션을 개설한 후 연결을 끊고 중단 없이 두지 않는 한 권리는 어쩐지 이상합니다.

))) 아니다. 당신은 나를 전혀 이해하지 못했습니다. 나는 "프로그래밍 방식으로 설치"가 아니라 프로그래밍 방식으로 결정하는 것에 대해 썼습니다. 일부 유형의 계정에서는 즉시 포지션을 개설하고 스탑/테이크를 설정할 수 없으며, 이는 나에게 더 바람직하고/안전합니다. mql5 에서 내가 틀리지 않았다면 이것을 결정할 수 있을 것 같다. 이 순간을 정의하고 정의에 따라 사용할 기능을 선택할 수 있기를 바랍니다.
 
Roman. :

문제 없습니다. 심지어 (개인 용도가 아닌 경우, 자신이 어떤 계정(거래 조건 및 누구로부터)을 사용해야 하는지 알고 있기 때문에), 그러나 귀하가 조언자를 주문하고 클라이언트 자신이 아직 어떤 계정과 위치를 결정하지 않은 경우 한 번에 가져 와서 중지를 설정할 수있는 유형의 계정에서도 사용하면 기본적으로 모든 유형의 주문을 설치할 때 이러한 수준의 값이 0 인 고문을 만든 다음 수정합니다 (작동합니다 모든 유형의 주문 및 특정 사무실의 중지 및 인수 수준을 설정하고 후속 수정하는 옵션을 사용하여 거래 작업을 수행할 때 아무도 확인 요구 사항 및 제한을 취소하지 않았습니다.

예, 해결 방법이 있으면 문제가 없습니다. 가지고 있는 것을 사용하고 올바르게 사용하기만 하면 됩니다.))
 

로마 인. 그리고 ivandurak 은 답변해 주셔서 감사합니다. 하지만 여전히 확인하기 어렵습니다. 다른 포럼에서 이 작업을 수행하는 방법에 대한 제안을 찾았지만 아직 일반적인 코드에는 적용할 수 없습니다.

int BuyTrue, SellTrue; // 위의 플래그로 사용할 변수를 정의합니다.
....
//--- 구매 조건
if (BuyTrue==0 && ... and plus your other conditions) // 포즈를 열기 위한 조건
{
....
주문 보내기(....); //주문을 여는 함수
BuyTrue=1; // BuyTrue=1이면 포즈를 여는 조건이 완전히 충족되지 않습니다.
// 따라서 매수 신호가 반복되면 거래가 열리지 않습니다.
SellTrue=0; // SellTrue=0이면 포즈를 여는 조건이 완전히 충족됩니다.
// 따라서 다음 거래는 Sell만 됩니다.
....
}

//--- 매도 조건
if (SellTrue==0 && ... and plus your other conditions) // 포즈를 여는 조건
{
....
주문 보내기(....); //주문을 여는 함수
SellTrue=1; // SellTrue=1이면 포즈를 여는 조건이 완전히 충족되지 않습니다.
// 따라서 Sell 신호가 반복되면 거래가 열리지 않습니다.
구매 참=0; // BuyTrue=0이면 포즈를 여는 조건이 완전히 충족됩니다.
// 따라서 다음 거래는 Buy만 됩니다.
....
}

내 거래 개시 코드

총계=주문총계();
if(총<1)
{
// 미결 주문이 식별되지 않음
if(AccountFreeMargin()<(1000*Lots))
{
Print("돈이 없습니다. Free Margin = ", AccountFreeMargin());
리턴(0);
}
// 롱포지션(BUY) 가능성 확인
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd 샘플",16384,0,Green);
if(티켓>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("구매 주문이 열렸습니다: ",OrderOpenPrice());
}
else Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);
}
// 매도(SELL) 가능성 확인
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
if(티켓>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("판매 주문이 열렸습니다: ",OrderOpenPrice());
}
else Print("판매 주문 열기 오류: ",GetLastError());
리턴(0);
}
반환(0);
}

 
SeALALex :

로마 인. 그리고 ivandurak 은 답변해 주셔서 감사합니다. 하지만 여전히 확인하기 어렵습니다. 다른 포럼에서 이 작업을 수행하는 방법에 대한 제안을 찾았지만 아직 일반적인 코드에는 적용할 수 없습니다.

int BuyTrue, SellTrue; // 위의 플래그로 사용할 변수를 정의합니다.
....
//--- 구매 조건
if (BuyTrue==0 && ... and plus your other conditions) // 포즈를 열기 위한 조건
{
....
주문 보내기(....); //주문을 여는 함수
BuyTrue=1; // BuyTrue=1이면 포즈를 여는 조건이 완전히 충족되지 않습니다.
// 따라서 매수 신호가 반복되면 거래가 열리지 않습니다.
SellTrue=0; // SellTrue=0이면 포즈를 여는 조건이 완전히 충족됩니다.
// 따라서 다음 거래는 Sell만 됩니다.
....
}

//--- 매도 조건
if (SellTrue==0 && ... and plus your other conditions) // 포즈를 여는 조건
{
....
주문 보내기(....); //주문을 여는 함수
SellTrue=1; // SellTrue=1이면 포즈를 여는 조건이 완전히 충족되지 않습니다.
// 따라서 Sell 신호가 반복되면 거래가 열리지 않습니다.
구매 참=0; // BuyTrue=0이면 포즈를 여는 조건이 완전히 충족됩니다.
// 따라서 다음 거래는 Buy만 됩니다.
....
}

내 거래 개시 코드

총계=주문총계();
if(총<1)
{
// 미결 주문이 식별되지 않음
if(AccountFreeMargin()<(1000*Lots))
{
Print("돈이 없습니다. Free Margin = ", AccountFreeMargin());
리턴(0);
}
// 롱포지션(BUY) 가능성 확인
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd 샘플",16384,0,Green);
if(티켓>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("구매 주문이 열렸습니다: ",OrderOpenPrice());
}
else Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);
}
// 매도(SELL) 가능성 확인
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
if(티켓>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("판매 주문이 열렸습니다: ",OrderOpenPrice());
}
else Print("판매 주문 열기 오류: ",GetLastError());
리턴(0);
}
반환(0);
}


먼저 Ctrl+Alt+M을 통해 편집기에 코드를 붙여넣습니다(또는 메뉴 상단에서 SRC를 누름). 그렇지 않으면 좋지 않습니다. 이해할 수 있습니다. 모든 것이 하나로 병합됩니다... :-)))

둘째, 교과서, 특히 당신에게 추천 된 링크의 정보를 읽으십시오. 코드 아래에 설명이 있으며 설명의 맨 끝에 방금 그린 설명이 있습니다. 위 / 아래 가격을보고하는 방법 MA 한 번 (이 거래 조건에 대한 일회성 항목 과 유사합니다 - 플래그 사용), MAGIC을 만들기 전에 ... :-)))

추신 또는 Google 검색에서 다음을 입력하십시오. site:mql4.com 코드를 올바르게 삽입하는 방법

 






if (SellTrue== 0 && A1<A2 && S1< 30 && ADX1<ADX2) // Условие открытия позы
        {
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 , 0 ,Bid-TakeProfit* Point , "AO sample" , 16384 , 0 , Red );
           if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES ||SellTrue== 1 )) Print ( "SELL order opened : " , OrderOpenPrice ());
           }
         else Print ( "Error opening SELL order : " , GetLastError ()); 
        
         if (ticket > 0 && SellTrue== 1 )   
     {
      SellTrue= 1 ;
      BuyTrue= 0 ;                 
       Alert ( "По данным условиям сделка уже открывалась" ); // Сообщение 
     }
        }
       return ( 0 );
로마 인. 작동하지 않죠?