코딩하는 방법? - 페이지 163

 

iCCI 질문

저는 MQL4가 처음이고 이전 CCI 값을 얻으려고 합니다. Shift 값이 1인 iCCI 기능 을 사용해 보았지만 이전 값이 표시되지 않습니다. 현재 값을 변수에 저장하지 않고 어떻게 합니까? CCI가 나아갈 방향을 결정하려고 합니다.

도와주셔서 감사합니다.

 

코드는 틱 기반이므로 해당 시간에 틱이 없으면 코드는 시간 확인 을 놓치게 됩니다. 지속적으로 실행되는 일종의 루프 없이는 정확한 초까지 얻을 수 있다고 생각하지 않습니다.

 

EA 편집에 대한 도움말

이 문제를 해결하려고 합니다... 도와주시겠습니까?

MB 거래 - 주식 옵션 선물 Forex 온라인 할인 거래

나는 이것을 바꿨다:

OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp,"MyMEFx EA"+MagicNumber,MagicNumber,0,Arrow sColor);

반환(0);

에게:

int 티켓 = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0,"MyMEFx EA"+MagicNumber,MagicNumber,0,Arrow sColor);

수면(1500);

OrderModify(티켓,OrderOpenPrice(),sl,tp,0,ArrowsColor);

==========================================

다음 오류가 발생합니다.

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify 기능에 대한 유효하지 않은 티켓

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend 오류 131

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY, H1: OrderModify 오류 4051

======================

 
coach3131:
이 문제를 해결하려고 합니다... 도와주시겠습니까?

MB 거래 - 주식 옵션 선물 Forex 온라인 할인 거래

나는 이것을 바꿨다:

OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp,"MyMEFx EA"+MagicNumber,MagicNumber,0,Arrow sColor);

반환(0);

에게:

int 티켓 = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0,"MyMEFx EA"+MagicNumber,MagicNumber,0,Arrow sColor);

수면(1500);

OrderModify(티켓,OrderOpenPrice(),sl,tp,0,ArrowsColor);

==========================================

다음 오류가 발생합니다.

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify 기능에 대한 유효하지 않은 티켓

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend 오류 131

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY, H1: OrderModify 오류 4051

======================

문제는 주문 전송 명세서의 로트 크기(볼륨)에 있습니다. 오류 때문에 -1을 반환합니다. 티켓 검증 가능에는 ordermodify 함수로 다른 오류를 유발한 -1의 오류 플래그가 포함된 티켓 번호가 포함되어 있지 않습니다. 허용 가능한 값을 포함하도록 로트 크기 변수 mylotsi를 수정해야 합니다. 두 번째로 ordermodify 루틴을 호출하기 전에 티켓 변수의 반환 값에 오류 플래그가 포함되어 있지 않은지 확인해야 합니다.

 

EA 최대 위치

누구든지 이 EA에 대해 최대 위치를 추가할 수 있습니까?

또는 한 위치만 실행하도록 하시겠습니까?

미리 감사합니다

 

당신은 더 나은 사용

MathAbs(NormalizeDouble(Bid,4)-NormalizeDouble(pivot,4))<Delta*Point,

여기서 델타=2...5

 
jdun:
누군가 정지 손실 및 tp에 대한 코드를 말해 줄 수 있습니까? 이 EA에 추가해야 합니다.

이 숨겨진 SL과 TP

int TakeProfit=20; // 20 pips take profit

int StopLoss =40; // 40 pips stoploss

int Slippage = 3;

int MagicNumber=1;

int i;

int start(){

//----- exit @ TP

if((ScanTrades()>=1)&& (ProfitInPips()>=TakeProfit)){

//----- This part will close all open orders and delete pending trades

for(i = OrdersTotal()-1; i >=0; i--)

{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);

if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());

if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());

}

}

}

//------exit @ SL

if((ScanTrades()>=1)&& (ProfitInPips()<= -StopLoss)){

//----- This part will close all open orders and delete pending trades

for(i = OrdersTotal()-1; i >=0; i--)

{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);

if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());

if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());

}

}

}

return (0);

}

//----------- Call functions

int ScanTrades()

{

int Tot = OrdersTotal();

int Numb = 0;

for(int cnt=0; cnt<=Tot-1; cnt++)

{

OrderSelect(cnt, SELECT_BY_POS);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) Numb++;

}

return(Numb);

}

double ProfitInPips()

{

RefreshRates();

double Prof=0;

int i;

int totalOrders=OrdersTotal();

for(i=0;i<totalOrders;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber)

{

if(OrderType()==0)

{

Prof+=(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);

}

if(OrderType()==1)

{

Prof+=(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);

}

}

}

return(Prof);

}

 

매수 주문과 매도 주문 이 몇 개 있다고 가정해 보겠습니다.

내가 원하는 것은 :

- 열린 거래의 손익분기점보다 5핍 더 높은 모든 거래 "바구니"를 종료합니다.

첫 번째 for 루프에서 하려고 하는 것은 열린 거래 + 스왑의 가치를 찾아 그것을 핍으로 변환하는 것입니다. 이것이 제가 막힌 부분입니다.

몇 가지 아이디어를 시도했지만 막 다른 골목에 도달했습니다. 문제가 첫 번째 for 문에 있다는 것을 알고 있지만 해결할 수 없습니다. 어떤 도움도 매우 적절합니다.

SymbolPL = 0;

OrdLots = 0;

Equity = 0;

MinPro = 5;

for(i = 0; i < OrdersTotal(); i++)

{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{if(OrderType() == OP_BUY) OrdLots += OrderLots();

if(OrderType() == OP_SELL) OrdLots -= OrderLots();

Equity += OrderProfit() + OrderSwap();

}

}

MinPro= MathRound (MathAbs(Equity /OrdLots)+MinPro);

//--- Count the open trades

int i;

int count=0;

for(i=0;i<OrdersTotal();i++)

{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber && OrderType()<2)

{ count++;

}

}

//--- find the profit in pips of the open trades

RefreshRates();

double profits=0,openPrice=0,points=0;

string sym="";

int i;

int totalOrders=OrdersTotal();

for(i=0;i<totalOrders;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber)

{

sym=OrderSymbol();

openPrice=OrderOpenPrice();

if(OrderType()==0)

{

profits+=(MarketInfo(sym,MODE_BID)-openPrice)/MarketInfo(sym,MODE_POINT);

}

if(OrderType()==1)

{

profits+=(OrderOpenPrice()-MarketInfo(sym,MODE_ASK))/MarketInfo(sym,MODE_POINT);

}

}

}

//--- Close when the open trades are 5 pips more than the breakeven price

if (count>1 && profits>MinPro )

{

for(i = OrdersTotal()-1; i >=0; i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Plum);

}

}

}

 

다음과 같이 계산되는 "equity_per_lotpoint" 상수를 사용할 수 있다고 생각합니다.

double equity_per_lotpoint = MarketInfo( Symbol(), MODE_TICKVALUE ) / MarketInfo( Symbol(), MODE_TICKSIZE );

[/PHP]

and then you'd have what you need after the first loop, with:

[PHP]if ( Equity > 5 * equity_per_lotpoint * MathAbs( OrdLots ) ) { ...

 

Ralph에게 감사하지만 스왑을 놓치고 주문 결정을 마칠 때 스왑 손익을 포함하고 싶습니다.