MQL5에서 함께 배우고 쓰기 - 페이지 24

 

이 기능은 모든 사람에게 무엇을 명확하게 합니까?

int OpenSell(double volume,int slippage=10,string comment="Open Short EUR/USD (Sell)",int magic0=102406)

{

MqlTradeRequest my_trade;

MqlTradeResult my_trade_result;

my_trade.action=TRADE_ACTION_DEAL;

my_trade.symbol=심볼();

my_trade.volume=NormalizeDouble(볼륨,1);

my_trade.price=NormalizeDouble(입찰가,_자리수);

my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits);

my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);

my_trade.deviation=미끄러짐;

my_trade.type=ORDER_TYPE_SELL;

my_trade.type_filling=ORDER_FILLING_AON;

my_trade.comment=댓글;

my_trade.magic=마법;


재설정 마지막 오류();

if(OrderSend(my_trade,my_trade_result))

{

time_oc=시간로컬();

md=0;

Print(" 작업 결과 코드 - ",my_trade_result.retcode);

}

또 다른

{

Print("작업 결과 코드 - ",my_trade_result.retcode);

Print("주문 열기 오류 = ",GetLastError());

}

리턴(0);

}

OnTick() 프로시저에서

...

OpenSell(Lot,10,"EUR/USD(판매)",102406);

...

처음에:

이중 손절매 = 250,

테이크프로핏=1400;

extern 이중 랏 = 0.1;

테스트 결과에서 도대체 -220$는 무엇입니까?

<날짜> <잔액> <자본> <마진 수준>

2010년 1월 1일   0:00:00 10000 10000 0

2010년 11월 1일   2:57:00 9779.29 9841.92 6827

2010년 1월 15일   16:00:00 9829.8 9941.9 6857

2010년 1월 22 일 1 4:32:00 10124.1 10135.9 7167

2010년 1월 26일   2:14:00 10048.6 10048.6 0

2010년 1월 26일   4:06:00 10048.6 10038.4 7099

2010년 1월 27일   21:12:00 10188.5 10188.5 0

2010년 1월 29일   2:16:00 10188.5 10308 7346

2010년 1월 29일   7:14:00 10188.5 10277.4 7324

2010년 4월 2일   22:05:00 10418.63 10480.83 7592


내가 틀렸다면, 당신의 코로 나를 찌르십시오.

나는 당신이 이 고문을 보게 하지 않을 것입니다. Bai의 기능은 비슷합니다 ...

카운터 오더로 포지션을 마감합니다.

 

확인. 나는 여기서 소리쳤다. 난 그냥 언어를 배우고 있어요. 내가 누군가를 기분 나쁘게했다면 사과드립니다. 나는 일하고 문제를 찾을 것이다. 내 잘못일 가능성이 높지만 고품질 mql5 Expert Advisors를 만드는 방법을 정말로 배우고 싶습니다. 아주 좋은 시스템이지만 ... 지금까지는 문제가 있습니다.

20명의 고문이 아무런 문제 없이 mql4를 쟁기질하지만.

 
Khomtchenko :
...
지정된 기간 동안 의 거래 내역을 제공하는 것이 좋으며이 수치는 아무도 모르는 곳에서 가져 오는 것이 아닙니다. 그러면 아마도 이 손실이 어디에서 왔는지 분명해질 것입니다.
 

"파일 작업" 섹션을 공부하기 위해 조금씩 시작했습니다. MQL5에서 파일 작업에 대한 튜토리얼이 있습니까?

 

특정 마법으로 모든 주문을 삭제하는 방법은 무엇입니까?

나는 이것을 위해 스페인어를 가지고 있습니다. 두 가지 기능인 check_orders는 def로 주문을 확인합니다. 마술, remove_sl 제거:

 void remove_sl()
     {
       int counter01;
       ulong counter02;
       while (check_orders()== true )
        {
         for (counter01= 0 ; counter01< OrdersTotal (); counter01++)
           {
            counter02= OrderGetTicket (counter01);
             if ( OrderGetInteger ( ORDER_MAGIC )!=magick)
               continue ;
            remove_request.action= TRADE_ACTION_REMOVE ; remove_request.order=counter02;
             if ( OrderCheck (start_request,check_result)== true )
               OrderSend (start_request,trade_result);
           }
        }
     }



bool check_orders()
     {
      int counter01;
      bool order_exist=false;
      for(counter01=0; counter01<OrdersTotal(); counter01++)
        {
         OrderGetTicket(counter01);
         if(OrderGetInteger(ORDER_MAGIC)==magick)
           {
            order_exist=true;
            break;
           }
        }
      return(order_exist);
 

문제는 EA 로그에 다음 줄이 표시된다는 것입니다.

2011.05.11 21:40:19 거래 '726238' : 주문 취소 실패 #4375237 0.00 at 0.00000 [잘못된 요청]
저것들. 주문 삭제 요청과 함께 거래 서버에 대한 추가 요청이 있습니다. 삭제 요청은 이미 전송되었습니다.

 

제 생각에는 포지션을 닫고 여는 데 문제가 있습니다.

여하튼 0.1로트 포지션이 아니라 실제로는 여러 로트가 있습니다. 분명히 한 심볼의 위치가 겹치고 위치의 볼륨이 커집니다. 이것은 큰 정지와 테스트의 큰 차이에 대한 위의 문제를 설명하는 유일한 방법입니다. 이는 열려 있는 트랜잭션의 존재를 올바르게 분석하지 않거나 추적을 올바르게 닫지 않음을 의미합니다.

다음은 기호에 열린 위치가 있는지 확인하는 데 사용하는 절차입니다.

int Total()

{

카운트=0;

(i=0; i<=PositionsTotal(); i++)

{

if (PositionGetSymbol(i)==_Symbol) {count++;}

}

리턴(카운트);

}

물론 함수는 0 또는 1을 반환합니다.

다음 항목을 사용하여 주문을 엽니다.

if(총()<1)

{

if (#일종의 지표 확인#) OpenBuy(Lots,10,"EUR/USD (Buy)",102406);

if (#일종의 지표 확인#) OpenSell(Lots,10,"EUR/USD(판매)",102406);

}

나는 다음과 같이 매수 및 매도를 엽니다.

int OpenSell(더블 볼륨,int slippage=10,string comment="Open Short EUR/USD (Sell)",int magic0=102406)

{

MqlTradeRequest my_trade;

MqlTradeResult my_trade_result;

my_trade.action=TRADE_ACTION_DEAL;

my_trade.symbol=심볼();

my_trade.volume=NormalizeDouble(볼륨,1);

my_trade.price=NormalizeDouble(입찰가,_자리수);

my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits);

my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);

my_trade.deviation=미끄러짐;

my_trade.type=ORDER_TYPE_SELL;

my_trade.type_filling=ORDER_FILLING_AON;

my_trade.comment=댓글;

my_trade.magic=마법;


재설정 마지막 오류();

if(OrderSend(my_trade,my_trade_result))

{

time_oc=시간로컬();

md=0;

Print(" 작업 결과 코드 - ",my_trade_result.retcode);

}

또 다른

{

Print("작업 결과 코드 - ",my_trade_result.retcode);

Print("주문 열기 오류 = ",GetLastError());

}

반환(0);

}

동일한 방식으로 기본 절차에서 거래를 마감합니다.

if (총()>0) TryToClose();

TriToClose는 다음과 같습니다.

int TryToClose()
{
(i=0; i<=PositionsTotal(); i++)
{
if (PositionGetSymbol(i)==_Symbol)
{
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
if(#일종의 지표 확인#) OpenSell(Lots,10,"EUR/USD(판매)",102406);
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
if(#일종의 지표 확인#) OpenBuy(Lots,10,"EUR/USD (Buy)",102406);
}
}
리턴(0);

}

지표에 의한 확인은 다음과 같습니다. 매수 포지션이 있어야 하지만 매도 포지션이 있으면 매수를 합니다.

내가 어디 잘못갔어. 나는 왜 고급 직위를 얻고 있습니까?

 
Khomtchenko :

SRC 버튼을 통해 코드 붙여넣기

Будет читабельнее
MT4 주문과 MT5 주문의 차이점을 아십니까?
 

mql4에서 주문은 거래 또는 보류 중일 수 있습니다.

mql5에서 주문은 보류 중인 거래입니다. 시장 진입 은 이미 포지션 을 열었습니다 . 주문이 발동되면 포지션이 열립니다. 하나의 기호에 대해 하나의 위치와 원하는 만큼 주문할 수 있습니다.

Спасибо за подсказку
 

모두가 나에게 어리석음을 암시합니다. 내가 벙어리로 하자. 글쎄, 내가 그것을 고칠 수 있도록 내 실수를 찾으십시오.

 
Khomtchenko :

모두가 나에게 어리석음을 암시합니다. 내가 벙어리로 하자. 글쎄, 내가 그것을 고칠 수 있도록 내 실수를 찾으십시오.

나는 아무 암시도 하지 않고 그냥 지나쳐서 가장 자주 그 이유가 무엇인지 물었습니다. 나는 당신의 훈련 수준을 모릅니다.

나는 오랫동안 여기에 있었고, 나는 이미 많은 것에 대한 내 의견을 형성했습니다.


주어진 조각의 경우 전략의 전체 그림을 볼 수 없습니다. 위치를 정렬한다는 사실로 판단하면 전략은 다중 통화입니다.

그러나 어떤 이유로 하나의 상품만 등록했습니다. 하나의 상품만 있다면 포지션을 순환하는 이유는 무엇입니까?

추신: 도구를 알고 있다면 위치를 검색하기 위해 모든 위치를 검색할 필요가 없습니다. 이 기능을 사용하기만 하면 됩니다.

 bool    PositionSelect (
   string   symbol     // имя инструмента
   );