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

 
lincoln2012:
MQ4를 배우려고 합니다. 내 첫 번째 간단한 프로그램은 2개의 MA가 교차할 때 경고를 표시해야 합니다. 이유를 알 수 없다

이 코드는 작동하지 않습니다.

어떤 도움이라도 정말 감사하겠습니다! 미리 감사드립니다.

extern int Period_MA1 = 5;

extern int Period_MA2 = 1;

이중 MA1;

이중 MA2;

정수 초기화()

{

리턴(0);

}

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

정수 초기화()

{

리턴(0);

}

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

정수 시작()

{

//------------------------------------------------ --------------------

MA1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0);

MA2=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0);

//------------------------------------------------ --------------------

만약 (MA2 == MA1 )

Alert("가격은 동일합니다(",Period_MA2,").");// 경고

반품;

}

안녕하세요 링컨2012,

이 Ma Cross의 코드를 확인할 수 있습니다.

파일:
macross-1.mq4  7 kb
 
lincoln2012:
MQ4를 배우려고 합니다. 내 첫 번째 간단한 프로그램은 2개의 MA가 교차할 때 경고를 표시해야 합니다. 이유를 알 수 없다

이 코드는 작동하지 않습니다.

}

2개의 표시줄 의 십자가를 코딩하는 핵심은 다음과 같은 개념입니다.

1. 현재 막대 line1>line2이고 이전 막대 line1<line2이면 Up 십자가가 있습니다.

2. 현재 막대가 line1line2이면 아래쪽 십자가가 있습니다.

 
mj10:
안녕

글쎄, 나는 Mt4에서 약간의 프로그래밍을 하고 있었지만 재미는 없었지만 오래된 지표의 단순한 편집은 아닙니다. 좋아, 나는 간단한 지표를 만들고 싶지만 그것을하는 방법을 모릅니다.

간단한 표시기 모든 변수의 값이 동일한 경우 값을 확인하기만 하면 모든 변수의 값이 일치하는 지점을 그립니다.

내 간단한 솔루션

변수가 있다고 가정 해 봅시다.

이중 이동avg1;

이중 이동avg12;

이중 이동avg13;

이중 이동avg14;

이중 이동avg15;

이중 이동avg16;

이중 이동avg17;

이중 이동avg18;

이중 이동avg19;

이중 이동avg10;

이중 이동avgall;

iStochastic(1)을 사용하는 예제를 제공하는 변수를 선언하지만 모든 지표에 사용할 수 있습니다.

moveavg12=iStochastic(1)

moveavg13=iStochastic(2)

.

.

.

지금

if (movingavg12=movingavg13=movingavg14,....) (변수 "movingavgall"에 값 입력) // vria에 대해 동일한 값을 입력합니다.

막대에 moveavgall 그리기

애플리케이션

이동 평균 3과 이동 평균 5가 동일한 값을 갖는 위치를 확인하고 싶다고 가정해 보겠습니다.

이 표시기조차도 RSI 1 및 RSI 2 값 = 80인 RSI와 함께 사용할 수 있습니다.

그리고 더 많은

보너스가 추가될 MTF를 추가해도

서면으로 간단해 보이지만 누군가가 도울 수 있기를 바라는 해결책을 찾을 수 없었습니다.

사람들이 내 말을 이해하기를 바랍니다.

감사해요

비교할 값이 있으면 다음과 유사한 코드를 사용합니다.

값이 동일한 지 확인 하려면 ==를 사용합니다. 단일 =는 변수에 값을 할당하는 데 사용됩니다.

2개 이상의 집합을 확인하려면 AND를 나타내기 위해 &&를 사용해야 합니다.

이동 평균 = 0;

if ((a == b) && (b == c) && (c == d)) moveavgall = a;

그런 다음 moveavgall에 다음 값이 있는지 확인할 수 있습니다.

if (movingavgall != 0)

{

// 여기서 뭔가를 해라

}

Google을 사용하여 메타 트레이더 프로그래밍을 검색하십시오.

MT4 프로그래밍에 대한 몇 가지 좋은 자습서를 찾을 수 있습니다.

C 프로그래밍에 대한 좋은 책도 도움이 될 것입니다.

로버트 힐(MrPip)

 

이 코드를 단순화

안녕하세요 여러분!

다음에서 stringconcatenate 명령을 사용하여 이 코드를 단순화하려고 합니다.

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );

이에:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\ ", uitog3v, "%"),12, StringConcatenate (hr1v ,hr2v,hr3v), 다저블루);

누군가가 나를 도울 수 있기를 바랍니다.

친애하는

문서

trend_alexcud_v_2men.mq4

파일:
 

...

문서

이 모든 요소가 필요한 경우 더 간단하게 작성할 수 있는 방법은 없습니다.

dr.house7:
안녕하세요 여러분!

다음에서 stringconcatenate 명령을 사용하여 이 코드를 단순화하려고 합니다.

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );

이에:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\ ", uitog3v, "%"),12, StringConcatenate (hr1v ,hr2v,hr3v), 다저블루);

누군가가 나를 도울 수 있기를 바랍니다.

친애하는

문서

trend_alexcud_v_2men.mq4
 

방법: 60초마다 알림

예를 들어 60초마다 경고를 표시하는 코드를 어떻게 만들 수 있습니까?

아래에 이 코드를 생성했지만 차트에 첨부할 때부터 1분마다 경고를 표시하고 브로커 시간을 따르도록 하여 예를 들어 매 60초마다 경고합니다.

#include

#include

// exported variables

// local variables

double PipValue=1; // this variable is here to support 5-digit brokers

bool Terminated = false;

string LF = "\n"; // use this in custom or utility blocks where you need line feeds

int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks

int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names

int ExpectedTime2 = 0;

int init()

{

NDigits = Digits;

ObjectsDeleteAll(); // clear the chart

Comment(""); // clear the chart

}

// Expert start

int start()

{

if (Bars < 10)

{

Comment("Not enough bars");

return (0);

}

if (Terminated == true)

{

Comment("EA Terminated.");

return (0);

}

OnEveryTick1();

}

void OnEveryTick1()

{

if (true == false && true) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

OncePerMinutes2();

}

void OncePerMinutes2()

{

int datetime800 = TimeLocal();

if (ExpectedTime2 == 0 || datetime800 > ExpectedTime2 + 60)

{

ExpectedTime2 = datetime800 + 60 * 1; // reset paused time

}

if (datetime800 >= ExpectedTime2 && datetime800 < ExpectedTime2 + 60)

{

ExpectedTime2 = datetime800 + 60 * 1;

Alert3();

}

}

void Alert3()

{

Alert("One minute gone");

}

int deinit()

{

if (true) ObjectsDeleteAll();

}

 
mladen:
Doc 그 모든 요소가 필요하다면 이보다 더 간단하게 작성하는 방법은 없습니다.

음, 이번에는 운이 나쁩니다. 어쨌든 감사합니다.

친애하는

문서

 

두 번째 StringConcatenate 호출에 문제가 있습니다.

3개의 다른 글꼴 이름을 함께 추가하고 있으며 유효한 결과 이름이 없습니다.

로버트

dr.house7:
안녕하세요 여러분!

다음에서 stringconcatenate 명령을 사용하여 이 코드를 단순화하려고 합니다.

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );

이에:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\ ", uitog3v, "%"),12, StringConcatenate (hr1v ,hr2v,hr3v), 다저블루);

누군가가 나를 도울 수 있기를 바랍니다.

친애하는

문서

trend_alexcud_v_2men.mq4
 

EA에 대한 도움이 필요합니다 ... 테스터에서 거래가 종료되지 않음

나는 EA에서 일하고 있지만 내가 무엇을 해도 거래를 성사시킬 수 없습니다. 잘 열리지만 닫고 싶을 때 EA가 닫지 않습니다.

경험 많은 코더 중 한 명이 내가 이 문제를 겪고 있는 이유를 이해할 수 있도록 EA 코드의 일부를 게시할 것입니다. vars 'buyTrade' 및 'sellTrade'는 전체 EA에 적용됩니다.

참고: 저는 길든 짧든 주어진 시간에 하나의 거래만 열리기를 원합니다. 거래는 "항상 인"이므로 긴 신호가 오면 기존 공매도를 마감해야 하며 그 반대의 경우도 마찬가지입니다.

이것은 이것을 하는 것이 아닙니다. 그것이 하는 일은 거래를 시작한 다음 더 많은 스레드를 열고 ... 더 많이 열고 ... 모두가 결국 멈출 때까지 열린 상태로 유지하는 것입니다.

미리 감사드립니다

//---- Is there a new signal?

// Buy signal ---------------------------------------

//if(buyTrade==false || sellTrade==false) {

if (STC_VIDYAprev = 10.00) {

if (sellTrade==true) {

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_BUY )

{ int OldTicket=OrderTicket(); double lots=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );

bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );

}

sellTrade = false;

}

if(buyTrade==false) {

EnterLong(Sym, Lots, "");

buyTrade = true;

}

}

//else

//return(0);

// Sell signal ---------------------------------------

if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {

if (buyTrade==true) {

for (int j = OrdersTotal() - 1; j >= 0; j--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_SELL )

{ int oldTicket=OrderTicket(); double lotts=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );

bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );

}

buyTrade = false;

}

if(sellTrade==false) {

EnterShrt( Sym, Lots, "");

sellTrade = true;

}

}

//else

//return(0);
 

...

부분 코드이므로 매도를 마감할 때 symBid를 symAsk로, 매수 주문을 마감할 때 symAsk를 symBid로 교체해 보십시오(종가를 반전하면 매도를 매도할 수 없으며 매도 호가에 매수를 마감할 수 없습니다)

outofdebt:
나는 EA에서 일하고 있지만 내가 무엇을 해도 거래를 성사시킬 수 없습니다. 잘 열리지만 닫고 싶을 때 EA가 닫지 않습니다.

경험 많은 코더 중 한 명이 내가 이 문제를 겪고 있는 이유를 이해할 수 있도록 EA 코드의 일부를 게시할 것입니다. 'buyTrade' 및 'sellTrade' 변수는 전체 EA에 적용됩니다.

참고: 저는 길든 짧든 주어진 시간에 하나의 거래만 열리기를 원합니다. 거래는 "항상 인"이므로 긴 신호가 오면 기존 공매도를 마감해야 하며 그 반대의 경우도 마찬가지입니다.

이것은 이것을 하는 것이 아닙니다. 그것이 하는 일은 거래를 시작한 다음 더 많은 스레드를 열고 ... 더 많이 열고 ... 모두가 결국 멈출 때까지 열린 상태로 유지하는 것입니다.

미리 감사드립니다

//---- Is there a new signal?

// Buy signal ---------------------------------------

//if(buyTrade==false || sellTrade==false) {

if (STC_VIDYAprev = 10.00) {

if (sellTrade==true) {

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_BUY )

{ int OldTicket=OrderTicket(); double lots=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );

bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );

}

sellTrade = false;

}

if(buyTrade==false) {

EnterLong(Sym, Lots, "");

buyTrade = true;

}

}

//else

//return(0);

// Sell signal ---------------------------------------

if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {

if (buyTrade==true) {

for (int j = OrdersTotal() - 1; j >= 0; j--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_SELL )

{ int oldTicket=OrderTicket(); double lotts=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );

bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );

}

buyTrade = false;

}

if(sellTrade==false) {

EnterShrt( Sym, Lots, "");

sellTrade = true;

}

}

//else

//return(0);