묻다! - 페이지 135

 
Kalenzo:
글쎄, 나는 당신이 일을 너무 복잡하게 생각합니다. 하나의 큰 기능 대신 몇 가지 짧은 코드 부분을 사용해 보십시오. 이것은 당신에게 약간의 힌트를 줄 것입니다:

도와주셔서 감사합니다. 말씀하신 코드를 추가하려고 했지만 솔직히 말해서 길을 잃었습니다. 코드를 추가한 후 EA는 많은 문제를 보여주고 있습니다. 구문을 살펴보았지만 길을 잃었습니다.

또한 int start() 함수 내에서 함수를 사용하는 것에 대한 질문이 있었습니다. 그것이 허용됩니까? 다른 함수에서 볼 수 없는 함수 내에서 변수가 초기화되지 않습니까?

그래서

정수 시작()

{

함수( 정수 x)

{

// 뭔가를 하다

반환(x)

}

// Do Something ... "start() 함수에서 x를 호출할 수 있습니까?'

반환0;

}

내 EA 소스를 첨부했습니다. 귀하의 도움에 감사드립니다.

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

//| CCCCCCCCIEA.mq4 aka 8xCIEA.mq4 |

//| By CuTzPR |

//|------------------------------------------------------------------+

#property copyright "CuTzPR@Forex-TSD"

//---- input parameters

extern double Risk_Percent=10;

extern bool Turned_On=true;

extern bool Allow_Risk=false;

extern bool TimeFilter=false;

extern double FromHourTrade=0; //Adjust for Broker GMT Time

extern double ToHourTrade=23; //Adjust for Broker GMT Time

extern double TP=20; // Take Profit Level

extern int MaxLong=5,MaxShort=5;

extern int MaxOpenOrders=10;

extern double Magic=10000;

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

//| expert start function |

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

int start()

{

int ticket;

double Lots;

bool Canopen,BlockTrade;

double Poin; // This variable was included to solve the problem where some brokers use 6 digit quotes instead of 5

static datetime timeprev; // Portion of coded was added to alloy only one trade per bar.

datetime CMT; //Close time of last trade

int total=OrdersTotal();

double Spread=Ask-Bid;

//This portion of code was added to only allow one trade per bar.

if(timeprev==Time[0])

{

return(0); //only execute on new bar

}

else if (timeprev==0)

{

timeprev=Time[0]; // do nothing if freshly added to chart

return(0);

}

else

{

timeprev=Time[0];

}

// End of alllow one trade per bar code

//*****Following code was added to control the Risk per trade.

if (Allow_Risk==true)

Lots=MathCeil(AccountFreeMargin() * Risk_Percent / 10000) / 10;

else Lots=0.1;

//End of Risk Code

//The following code was also included to solve the 6 digit broker quoting

if (Point == 0.00001) Poin = 0.0001; //6 digits

else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)

else Poin = Point; //Normal

//End Point Code

// Custom Functions

double cci=iCCI(NULL,PERIOD_M5,5,PRICE_TYPICAL,0);

double SATL=iCustom(NULL,PERIOD_H1,"$SATL",0,1);

// End of Custom Function

//Start of total count of open Long and Short Orders.

int totalOrders (totalBuy)

{

int totalNumber= 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

totalNumber++;

}

return (totalNumber);

}

int totalOrders (totalSell)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

totalNumber++;

}

return(totalNumber);

}

int totalBuy = totalOrders(totalBuy);

int totalSell = totalOrders(totalSell);

int EAopenOrders=totalBuy+totalSell;

//End of total Open Long and Short count code

// Time filter Code

if (TimeFilter==true)

{

if (!(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute() <=2))

BlockTrade=true;

else BlockTrade=false;

}

//End of time Filter code

// Are trades allowed to be opened?

if(EAopenOrders<=MaxOpenOrders && BlockTrade==false && Turned_On==true)

Canopen=true;

else if(EAopenOrders>MaxOpenOrders || BlockTrade==true || Turned_On==false)

Canopen=false;

// End of Allow code

//*****Trade Open Order Functions

if(Canopen==true)

{

if (totalBuy<=MaxLong)

{

if (cci>-100 && SATL<Ask)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"CCI0",Magic,0,Blue);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print ("Error opening BUY order : ",GetLastError());

return (0);

}

}

else if (totalSell<=MaxShort)

{

if (cciBid)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"CCI",Magic,0,Red);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print ("Sell order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL Order : ",GetLastError());

return (0);

}

}

}// End of Trade Open Order Functions

//****Close Orders if they are profitable

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_BUY && TP != 0 && totalBuy!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_SELL && TP != 0 && totalSell!=0 )

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

} // Close Profitable trades loop closed

}// End of Start function

귀하의 도움에 감사드립니다.

 
Limstylz:
안녕 모두,

나는 원래 이것을 새 스레드로 게시했지만 다른 프로그래밍 스레드로 옮겨졌고(나는 그것의 이동 BTW에 대해 이의가 없습니다) 이제 그 스레드의 포스터 양으로 인해 길을 잃은 것 같습니다.

여기 누군가가 나를 도울 수 있습니까?

Limstylz는 이 Ask! 스레드 페이지 39. 도움이 될 만한 정보가 있을 것 같습니다. 행운을 빕니다

 

건배 친구...

cutzpr:
Limstylz는 이 Ask! 스레드 페이지 39. 도움이 될 만한 정보가 있을 것 같습니다. 행운을 빕니다

cutzpr님 감사합니다만 이미 해결했습니다... 인터넷 연결이 하루 종일 끊겼고 내 뇌세포를 번만 사용해야 했습니다.

어쨌든, int start()에 대한 질문에 답하기 위해... 이것은 EA의 본체이며 매 틱마다 지속적으로 업데이트됩니다(제 생각이 맞다고 생각합니다).

귀하의 코드는 다소 혼란스럽습니다... 어디에서 문제가 발생하는지 설명해 주시겠습니까? 실제로 MQL4를 혼자 배우고 있는 중이지만 문제를 분석해 주시면 도움을 드릴 수 있습니다.

 

이게 무슨 문제야?

여기 누군가 나를 도와줄 수 있습니까?이 표시기를 내 메타에 복사하면 메타를 여는 데 5분 이상이 필요합니다. 하지만 삭제하고 메타를 다시 열면 다시 정상이 됩니다.

파일:
 

감사합니다!!!좋습니다!

 

드로잉 보드로 돌아가기

 

전문 고문에 맞춤형 지표 포함

안녕하세요 여러분, 아래의 맞춤형 지표를 전문 고문에 추가하는 방법을 아는 사람이 있습니까? 그래서 우리는 파일에서 그것을 호출하기 위해 icustom을 사용할 필요가 없습니까?

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

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

for(i = limit; i >= 0; i--)

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}
 
yast77:
안녕하세요 여러분, 아래의 맞춤형 지표를 전문 고문에 추가하는 방법을 아는 사람이 있습니까? 그래서 우리는 파일에서 그것을 호출하기 위해 icustom을 사용할 필요가 없습니까?
//+------------------------------------------------------------------+

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

for(i = limit; i >= 0; i--)

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}

이 표시기를 호출하려면 EA의 iCustom 기능 을 사용해야 합니다.

iCustom(Symbol(),0,"ARSI",ARSIPeriod, 0,0 );

빨간색 숫자는 보고자 하는 막대입니다. 필요에 따라 변경하십시오.

FerruFx

 
FerruFx:
이 표시기를 호출하려면 EA의 iCustom 기능을 사용해야 합니다.

iCustom(Symbol(),0,"ARSI",ARSIPeriod, 0,0 );

빨간색 숫자는 보고자 하는 막대입니다. 필요에 따라 변경하십시오.

FerruFx

답장을 보내 주셔서 감사합니다. 예, 나는 우리가 icustom 기능을 사용할 수 있다는 것을 알고 있지만, 우리는 지표에서 코딩을 입력하여 지표 기능을 임베드할 수 있습니다. codersguru가 설명하는 www.metatrader.info 에 대해 설명되어 있지만 ARSI 지표의 경우 이를 전문 고문에 포함시키는 방법을 모르겠습니다. 어떤 추천을 주셔서 감사합니다 !!

 

10점3 개선

안녕하세요 여러분.

우리는 10point3를 개선하기 위해 노력하고 있습니다. 마지막 세 번째 거래를 마감하려면 코드를 변경해야 합니다. 여기에서 지난 게시물을 참조하십시오.

https://www.mql5.com/en/forum/174975/page259 .

우리는 여기서 좋은 결과를 얻고 있습니다.