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

 
MrPip:
OrderComment()를 사용하여 거래를 식별할 때 주의하십시오. 때로는 브로커가 댓글에 문자를 추가합니다.

사용하는 것이 가장 좋습니다

if (StringFind(OrderComment(), UserComment, 0) > 0)

{

// OrderComment에서 찾은 UserComment로 식별된 주문

}

대신에

if (OrderComment() == UserComment)

{

// 주문은 UserComment로 식별될 수 있습니다.

// 브로커가 OrderComment를 변경하지 않은 경우

}

로버트

정확히 ... 또한 때로는 EA에 코딩된 원래 주석이 너무 길어 플랫폼에서 잘릴 수 있습니다(나머지 주석이 "메모리"에 있는지 확실하지 않지만 주석 열에 표시되지 않음).

FerruFx

 

내 EA에 도움이 필요해

안녕,

저는 롱 포지션과 숏 포지션을 동시에 여는 EA에서 일하고 있는데 이 문제에 직면하고 있습니다... 두 가지 유형의 포지션이 모두 열릴 때 첫 번째 포지션은 숏 포지션이고 두 번째 포지션은 롱 포지션이라고 가정해 보겠습니다... EA는 롱 포지션을 청산하지 않을 것입니다 매도가 여전히 열려 있으면 매도가 닫힐 때까지 기다렸다가 조건이 충족되면 매수를 닫고 그 반대의 경우도 마찬가지입니다. 다음은 오픈 포지션을 마감해야 하는 EA의 일부입니다.

//---- 오픈 포지션 닫기

for(int cnt=0; cnt<전체; cnt++)

{

주문 선택(cnt, SELECT_BY_POS);

{

//-- 닫기 롱

if(OrderSymbol() == Symbol() && OrderType()==OP_BUY && rsi1>75 && rsi<75)

{

OrderClose(OrderTicket(),OrderLots(),Bid,5,Green);

LotL=로트;

}

//-- 닫기 닫기

if(OrderSymbol() == Symbol() && OrderType()==OP_SELL && rsi125)

{

OrderClose(OrderTicket(),OrderLots(),Ask,5,Red);

LotS=로트;

}

}

}

*여기서 rsi1은 이전 rsi이고 rsi는 현재 판독값입니다.

*LotL & LotS는 원래 Lot의 승수이며, 각 측면에서 최대 3개의 포지션을 열도록 설정했습니다. 따라서 한 유형의 열린 포지션을 닫을 때 LotL & LotS는 원래 크기로 재설정됩니다.

EA는 위치를 열 때 의도한 대로 작동하지만 문제는 열린 위치를 닫는 데 있습니다. 루프 부분의 EA가 모든 열린 위치를 읽는 것이 아니라 첫 번째 위치만 읽는다고 생각합니다... 이 문제를 해결하는 데 도움을 주시면 감사하겠습니다! !

건배!

피트

 

"Pips to activate Trailing stop" 기능을 추가하려고 합니다. 내가 변경한 것은 빨간색입니다. 그 밖에 추가해야 할 사항은 무엇입니까?

extern string Remark1 = "== Main Settings ==";

extern int MagicNumber = 54321;

extern bool SignalMail = False;

extern bool EachTickMode = true;

extern double Lots = 4;

extern int Slippage = 2;

extern bool UseStopLoss = false;

extern int StopLoss = 100;

extern bool UseTakeProfit = false;

extern int TakeProfit = 15;

extern bool UseTrailingStop = true;

extern int TrailingStop = 45;

extern double Pips_Activate_TS = 5;

extern bool MoveStopOnce = False;

extern int MoveStopWhenPrice = 50;

extern int MoveStopTo = 1;

extern int MaxConcurrentTrades = 2;

//Version 2.01

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 |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| 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() && OrderMagicNumber() == MagicNumber) {

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;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

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 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;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

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(Open[0] > Open[0+1] &&

Open[0+1] >= Open[0+2] &&

Open[0+2]>= Open[0+3] &&

Open[0+3] >= Open[0+4] &&

Open[0+4] >= Open[0+5] &&

Open[0+5] >= Open[0+6]) Order = SIGNAL_SELL;

if(Open[0] < Open[0+1] &&

Open[0+1] <= Open[0+2] &&

Open[0+2]<= Open[0+3] &&

Open[0+3] <= Open[0+4] &&

Open[0+4] <= Open[0+5] &&

Open[0+5] <= Open[0+6]) Order = SIGNAL_BUY;

//+------------------------------------------------------------------+

//| Signal End |

//+------------------------------------------------------------------+

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(DecideToOpenTrade(OP_BUY) && TradeSlotsAvailable()) {

//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(DecideToOpenTrade(OP_SELL) && TradeSlotsAvailable()) {

//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);

}

 
 
mifiglo:
거래처 여러분, 안녕하세요.

Custom 표시기에서 Expert Advisor를 개발하는 데 약간의 문제가 있습니다. "iCustom" 기능을 시도했지만 내 표시기는 항상 동일한 값을 반환합니다.

그것은 21473과 같은 것을 반환합니다 ..., 그와 같이

나는 EA가 언제 매도 및 매수 화살표 신호가 생성되는지 인식할 수 있기를 원하고 해당 거래 행동을 수행해야 합니다(즉, 지표가 상승할 때 매수하고 하락할 때 매도).

다음은 지표의 코드입니다. 누군가가 최대한 빨리 해결책을 제시할 수 있다면 정말 감사하겠습니다.

iCustom() 함수 와 함께 코드 라인도 게시하십시오.

FerruFx

 

미안, 이게 내가 가진 전부야...

 
 

르시 이아

이것은 내 첫 번째 EA입니다. 그것은 3개의 시간 프레임에서 2개의 rsi의 교차를 사용합니다. 나는 ea가 십자가에 반대하는 거래를 하는 것에 문제가 있습니다. 팔려야 할 때 사고 사려고 할 때 팔아라. 누군가 코드를 보고 내가 어디에서 잘못되었는지 말해 주시겠습니까? 나는 잘못된 것을 볼 수 없었습니다.

나는 문제의 ea와 사진을 첨부했습니다.

파일:
 

EA 코드에 대한 도움이 필요합니다!

안녕하세요 여러분,

fx시장이 24시간이라는 걸 알다시피, 나는 PC 앞에 앉아 있지 않고 밤새 거래하는 것이 편하지 않다. 그래서 가장 좋은 방법은 가격이 내가 좋아하는 방향으로 움직일 때 거래를 보호하는 프로그램이라고 생각합니다. 예를 들어, 총 5개의 랏을 열었을 때 이익이 50핍 이상이면 자동으로 손절매를 손익분기점으로 이동합니다. 이익이 100핍 이상이면 30핍 보호로 이동하고, 이익이 200핍 이상일 때 50핍 보호로 이동합니다. 등등.

나는 내 자신을 코딩하려고 노력했다. 하지만 차트로 드래그하여 실시간 거래로 설정하면 작동하지 않습니다. 내 코드를 보고 수정하는 데 도움을 줄 수 있는 기관이 있습니까? 감사합니다.

#재산권 "x li"

#속성 링크 ""

#프로퍼티쇼_확인

//---- 입력 매개변수

외부 int target1 = 50;

외부 int target2 = 100;

외부 int target3 = 150;

외부 int target4 = 200;

외부 int target5 = 300;

외부 int 보호1 = 0;

외부 int 보호2 = 5;

외부 int 보호3 = 50;

외부 int 보호4 = 100;

//+----------------------------------------------- ------------------------------+

//| 스크립트 "스톱로스를 보호하기 위해 이동(50->0;100->5;150->50;200->50;300->100)" |

//+----------------------------------------------- ------------------------------+

정수 시작()

{

부울 결과;

이중 stop_loss, 포인트, EntryPrice, 이익;

int cmd, 총계, 오류, i;

//----

총계=주문총계();

point=MarketInfo(Symbol(),MODE_POINT);

//----

for(i=0; i<전체; i++)

{

if(주문선택(i,SELECT_BY_POS,MODE_TRADES))

{

cmd=주문 유형();

EntryPrice=OrderOpenPrice();

//---- 구매 주문이 고려됩니다.

if(cmd==OP_BUY)

{

이익=입찰가;

if(이익>목표1*포인트 && 수익<목표2*포인트)

{

stop_loss=EntryPrice+protect1*포인트;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(이익>목표2*포인트 && 수익<목표3*포인트)

{

stop_loss=EntryPrice+protect2*포인트;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(이익>목표3*포인트 && 수익<목표4*포인트)

{

stop_loss=EntryPrice+protect3*포인트;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(이익>목표4*포인트 && 수익<목표5*포인트)

{

stop_loss=EntryPrice+protect3*포인트;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(이익>목표5*포인트)

{

stop_loss=EntryPrice+protect4*포인트;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

}

//---- 판매 주문 이 고려됩니다.

if(cmd==OP_SELL)

{

이익=EntryPrice-Ask;

if(이익>목표1*포인트 && 수익<목표2*포인트)

{

stop_loss=EntryPrice-protect1*포인트;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(이익>목표2*포인트 && 수익<목표3*포인트)

{

stop_loss=EntryPrice-protect2*point;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(이익>목표3*포인트 && 수익<목표4*포인트)

{

stop_loss=EntryPrice-protect3*point;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(이익>목표4*포인트 && 수익<목표5*포인트)

{

stop_loss=EntryPrice-protect3*point;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

if(이익>목표5*포인트)

{

stop_loss=EntryPrice-protect4*point;

결과=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);

}

}

}

else { Print( "주문 선택 시 오류 발생 ", GetLastError()); 부서지다; }

}

//----

반환(0);

}

//+----------------------------------------------- -------------------+

 

르시 이아

왜 같은 변수를 사용하여 거래를 열고 닫는지 모르겠지만 작동할 수 있습니다.

이것이 문제일 수 있습니다.

"주문"은 전역 변수입니다. 따라서 시작 기능 을 통한 각 실행이 끝날 때 할당된 마지막 값으로 설정되고 다음 실행 시작에 해당 값을 사용합니다. 로컬로 만들면(Start 내부로 이동) 문제가 해결될 수 있습니다. 그렇지 않으면 마지막으로 사용한 후 재설정해야 합니다.

좋은 사냥,

빅비

사유: