묻다! - 페이지 76

 

EA 질문

안녕하세요 Codersguru님,

나는 프로그래밍을 배우려고 노력 중이고 당신의 자료를 사용하고 있습니다. 훌륭하다고 말하겠습니다! 단계별로 간단하게 따라할 수 있습니다. 감사합니다.

질문이 있습니다. EA의 예로 ema 크로스오버를 사용하기 때문에 ema 대신 stepMA_7.2 표시기를 사용할 생각이었습니다. 당신은 stepMA_7.2가 작동할 것이라고 생각합니까? 또는 코드를 재배열해야 하거나 더 많은 추가 코드 가 필요할 수 있습니까?

코드에서 지표만 교체하면 된다고 생각했습니다.

미리 감사드립니다

건배.

 
Michel:
이것은 잘못되었습니다. 이전 막대는 양수로 계산됩니다.
MA_EXIT_1=iMA(NULL,PERIOD_H1,MA_Exit,0,MODE_LWMA,PRICE_WEIGHTED,-1);[/PHP] Use this instead:[PHP]MA_EXIT_1=iMA(NULL,PERIOD_H1,MA_Exit,0,MODE_LWMA,PRICE_WEIGHTED,1);

고맙습니다.

 
 

아직 몇 가지 문제가 있습니다. 구매 주문은 올바르게 열리지만 출구 조건을 무시하고 모두 손절매로 마감됩니다.

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

//| EA Stripped Down.mq4 |

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

#property copyright ""

#property link ""

extern double StopLoss =13.0;

extern double MA_Open =12.0;

extern double MA_Close =12.0;

extern double MA_Exit =6.0;

extern double Lots =50.0;

#define MAGICMA 20050610

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

int init()

{

return(0);

}

int deinit()

{

return(0);

}

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

int start()

{

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

double MA_CLOSE;

double MA_OPEN;

double MA_EXIT_0;

double MA_EXIT_1;

int res;

if(Volume[0]>1) return;

MA_CLOSE=iMA(NULL,0,MA_Close,1,MODE_SMA,PRICE_CLOSE,0);

MA_OPEN=iMA(NULL,0,MA_Open,1,MODE_SMA,PRICE_OPEN,0);

MA_EXIT_0=iMA(NULL,0,MA_Exit,1,MODE_LWMA,PRICE_WEIGHTED,0);

MA_EXIT_1=iMA(NULL,0,MA_Exit,1,MODE_LWMA,PRICE_WEIGHTED,1);

if((MA_CLOSE-MA_OPEN>=1*Point) && MA_EXIT_0>MA_EXIT_1)

{

res=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Ask-StopLoss*Point,0,"",MAGICMA,0,Blue);

return;

}

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

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

if(Volume[0]>1) return;

MA_EXIT_0=iMA(NULL,PERIOD_H1,MA_Exit,1,MODE_LWMA,PRICE_WEIGHTED,0);

MA_EXIT_1=iMA(NULL,PERIOD_H1,MA_Exit,1,MODE_LWMA,PRICE_WEIGHTED,1);

if(OrderType()==OP_BUY)

{

if(MA_EXIT_0<=MA_EXIT_1) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

return;

}

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

}
 
 

다른 지표의 이동 평균

그것을 알아 냈습니다.

 

범위 내에서 열린 위치 확인

x핍 내에서 열린 위치를 확인하려고 하는데 열려 있는 위치가 없으면 하나가 열립니다. 작동하지 않고 계속해서 직책을 엽니 다. 아무도 도울 수 있습니까?

if(구매포지션)

{

weBeBuying = 사실;

총 주문 = 주문 총계();

for(i=0;i<총주문수;i++)

{

주문선택(i,SELECT_BY_POS);

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

{

유형 = 주문 유형();

if((유형 == OP_BUY) || (유형 == OP_BUYLIMIT))

{

if(((Bid+spread) - OrderOpenPrice()) > -0.0013)

weBeBuying = 거짓;

}

}

}

}

if(weBeBuying==true)

OrderSend(Symbol(),OP_BUY,lots,Bid+spread,slippage,0,0,NULL,magicNumber,0,Green);

 

iCustom 지표 의 MA

iCustom 지표의 이동 평균 7, Smooth를 참조하기 위해 ea의 명령문을 어떻게 코딩합니까? 이는 첫 번째 지표 데이터를 사용하여 이동 평균을 사용하는 것과 같습니다. iCustom 표시기를 표시하고 표시기의 MA를 사용하여 이 작업을 수행할 수 있지만(첫 번째 표시기 데이터 사용) ea에서 어떻게 코딩합니까???

이 진술에 대해 저를 도와주세요!

도움을 주셔서 미리 감사드립니다!

데이브

아무도 이것을 도울 수 있습니까???? 제발!!!!

나는 그것을 얻었다고 생각한다!:

LR0=iCustom(NULL,0,"라게르 RSI 긴 및 짧은 항목",0,0); //낮은 감마

아직 도움이 필요합니다. - 도와주실 수 있나요!

 

MQL4와 관련된 질문을 게시해 주시면 최선을 다해 답변해 드리겠습니다.

오류 코드의 경우.

나는 내 모든 전문가에게 아래의 Coders Guru와 같은 전문가에게도 오류 코드 "OrderModify error 1"이 있다는 계정을 방금 반환했습니다.

왜요?

감사해요 !

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

//| PriceCross.mq4 |

//| 코더 전문가 |

//| https://www.mql5.com/en/forum |

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

#property copyright "코더스 전문가"

#속성 링크 "https://www.forex-tsd.com"

//---- 포함

#포함하다

//---- 거래 한도

외부 이중 TakeProfit = 200;

외부 이중 TrailingStop = 50;

외부 이중 손절매 = 50;

extern 이중 로트 = 0.1;

extern int 미끄러짐 = 5;

//--- 외부 옵션

외부 int 현재 표시줄 = 1;

외부 int HedgeLevel = 6;

extern 이중 만료 = 7200;

외부 정수 크기 = 4;

extern int 단계 = 1;

extern bool UseClose = true;

//--- 표시기 설정

외부 정수 MaMode = 3;

외부 정수 MaPeriod = 24;

//--- 전역 변수

정수 MagicNumber = 101090;

string ExpertComment = "PriceCross";

bool LimitPairs = true;

bool LimitFrame = true;

정수 타임프레임 = 60;

문자열 LP[] = {"EURUSD","USDCHF","GBPUSD","USDJPY"}; // 제한하려는 파리를 추가/제거합니다.

bool 최적화 = true;

정수 NumberOfTries = 5;

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

정수 초기화()

{

리턴(0);

}

정수 초기화()

{

리턴(0);

}

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

bool isNewSymbol(문자열 current_symbol)

{

// 열려 있는 모든 순서를 반복하고 기호를 비교합니다.

정수 합계 = OrdersTotal();

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

{

주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);

문자열 selected_symbol = OrderSymbol();

if (current_symbol == selected_symbol && OrderMagicNumber()==MagicNumber)

반환(거짓);

}

반환(참);

}

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

정수 시작()

{

int cnt, 티켓, 합계, n;

이중 추세 ;

if(Bars<100) {Print("막대가 100보다 작음"); 반환(0);}

if(제한 프레임)

{

if(Period()!=TimeFrame) {Print("이 EA는 이 TimeFrame에서 작동하지 않습니다!"); 반환(0);}

}

if(LimitPairs)

{

if(AllowedPair(Symbol()) == false) {Print("이 EA는 이 통화로 작동하지 않습니다!"); 반환(0);}

}

추세 = iMA(NULL,0,MaPeriod,0,MaMode,PRICE_CLOSE,CurrentBar);

//--- 거래 조건

부울 BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false ;

if (Open[1]트렌드)

구매 조건 = true;

if (열기[1]>추세 && 닫기[1]<추세)

SellCondition = true;

if (열기[1]>추세 && 닫기[1]<추세)

CloseBuyCondition = true;

if (Open[1]트렌드)

CloseSellCondition = true;

총계 = OrdersTotal();

if(총 < 1 || isNewSymbol(Symbol()))

{

if(구매조건) //<-- 구매조건

{

티켓 = OpenOrder(OP_BUY); //<-- BUY 주문 열기

CheckError(티켓,"구매");

for(n=0 ; n< 크기 ; n++)

{

티켓 = OpenPendingOrder(OP_BUYSTOP,Lots,HedgeLevel+(n*Step+1),Slippage,StopLoss,TakeProfit,ExpertComment,MagicNumber,CurTime() + 만료);

}

리턴(0);

}

if(SellCondition) //<-- 판매 조건

{

티켓 = OpenOrder(OP_SELL); //<-- 오픈 매도 주문

CheckError(티켓, "판매");

for(n=0 ; n < 크기 ; n++)

{

티켓 = OpenPendingOrder(OP_SELLSTOP,Lots,HedgeLevel+(n*Step+1),Slippage,StopLoss,TakeProfit,ExpertComment,MagicNumber,CurTime() + 만료);

}

리턴(0);

}

리턴(0);

}

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

{

주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);

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

{

if(OrderType()==OP_BUY) //<-- 롱 포지션 오픈

{

if(닫기 사용)

{

if(CloseBuyCondition) //<-- 주문을 종료하고 종료합니다!

{

CloseOrder(주문 유형()); 리턴(0);

}

}

TrailOrder(주문 유형()); 리턴(0); //<-- 주문 후행

}

if(OrderType()==OP_SELL) //<-- 숏 포지션으로 이동

{

if(닫기 사용)

{

if(CloseSellCondition) //<-- 주문을 닫고 종료합니다!

{

주문 마감(OP_SELL); 리턴(0);

}

}

TrailOrder(주문 유형()); 리턴(0); //<-- 주문 후행

}

}

}

반환(0);

}

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

....

 

안녕,

어쨌든 주문이 이미 마감되었음을 알 수 있습니까?

그림은 다음과 같습니다.

2개의 대기 주문을 엽니다.

오픈 #182 매수 제한 0.17 EURUSD at 1.3005 sl: 1.2970 tp: 1.3013

오픈 #183 매수 제한 0.17 EURUSD 1.3000 sl: 1.2968 tp: 1.3011

그 다음에

주문 #182, 구매 0.17 EURUSD는 1.3005에서 열립니다.

1.3013(1.3013 / 1.3015)에서 이익 #182

주문 #182가 마감된 후 주문 #183을 삭제하고 싶습니다. 트리거는 주문 #182가 마감되면 주문 #183이 삭제된다는 것입니다.

건배