[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 420

 

안녕하세요.

다음 루프를 만들었습니다.

 for (j= 0 ;j< ArraySize (fiboOrd);j++)
 {
   if (fiboOrd[j]==d && TP== 0 ) TP= NormalizeDouble (Asia*fibo[j], Digits );
   if (fiboOrd[j]==d && TP> 0 )  Price= NormalizeDouble (Asia*fibo[j], Digits );
 }

문제는 다음과 같습니다. 어떤 이유로 변수 TP의 값은 j의 첫 번째 값에 대해서만 발견되는 반면, 변수 Price의 값은 j의 모든 값에 대해 발견됩니다.

모든 j 값에 대한 모든 TP 값을 찾는 방법은 무엇입니까? 내 실수가 뭐야?

미리 감사드립니다.

 
nemo811 :

모든 j 값에 대한 모든 TP 값을 찾는 방법은 무엇입니까? 내 실수가 뭐야?

나는 질문을 제거하고 스스로 알아 냈습니다.

 
frixer :
안녕하세요, 예를 들어 마지막 촛불의 저점과 고점을 찾는 방법을 알려주십시오.


마지막은 아직 완전히 형성되지 않은 것입니까?

Low_0=Low[ 0 ];                                 // Low_0 присвоена мин. цена 0-го бара
High_0=High[ 0 ];                               // High_0 присвоена макс. цена 0-го бара
 

테스터에서 모든 것이 정상적으로 열리지만 고문이 실제 거래에서 거래를 열지 못하는 이유를 알려주십시오. 그리고 로그에는 오류가 없습니다. 알파리 데모 서버.

 
sss2019 :

테스터에서 모든 것이 정상적으로 열리지만 고문이 실제 거래에서 거래를 열지 못하는 이유를 알려주십시오. 그리고 로그에는 오류가 없습니다. 알파리 데모 서버.


그래서 당신은 즉시 말하지 않을 것입니다 - 많은 옵션이 있습니다 .... 더 자세한 정보를 알려주실 수 있습니까?
 
elmucon :

그래서 당신은 즉시 말하지 않을 것입니다 - 많은 옵션이 있습니다 .... 더 자세한 정보를 알려주실 수 있습니까?


예, 잘 모르겠습니다. 모든 것이 테스터의 시계처럼 작동하지만 데모 계정 에서는 이미 시간이 왔지만 거래가 열리지 않았으며 다음 시간도 마찬가지입니다. 코드를 볼 수 있습니까

 //+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| extern variables                                                 |
//+------------------------------------------------------------------+

extern int GMT = 2 ;
extern int InTime = 23 ;
extern int OrderDuration = 2 ;
extern double Lot = 0.1 ;
extern string MyComment = "Return" ;
extern int Slippage = 3 ;
extern int StopLoss = 150 ;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int CurrentHour = TimeHour ( TimeCurrent ());
   int CurrentMinute = TimeMinute ( TimeCurrent ());
   datetime OrderExpiriation = TimeCurrent () + 3600 * OrderDuration;
  
   double MyPoint = Point ;
   if ( Digits == 3 || Digits == 5 )
    {
    MyPoint = Point * 10 ;
    }
//----
   if ( TimeHour ( TimeCurrent ()) + GMT == InTime && TimeMinute ( TimeCurrent ()) == 0 && OrdersTotal () == 0 )
     {
//---- Sending first order - Buy
     if ( OrderSend ( Symbol (),OP_BUYLIMIT,Lot,Open[ 0 ] - 10 * MyPoint,Slippage,Open[ 0 ] - StopLoss * MyPoint,Open[ 0 ],MyComment, 16523 ,OrderExpiriation, Green ) > 0 )
       {
       Alert ( "Первый ордер запущен" );
       } else
       {
       Alert ( "Первый ордер не запущен" );
       }
//---- Sending second order Buy
     if ( OrderSend ( Symbol (),OP_BUYLIMIT,Lot,Open[ 0 ] - 15 * MyPoint,Slippage,Open[ 0 ] - StopLoss * MyPoint,Open[ 0 ],MyComment, 16523 ,OrderExpiriation, Green ) > 0 )
       {
       Alert ( "Второй ордер запущен" );
       } else
       {
       Alert ( "Второй ордер не летит" );
       }
//---- Sending third order - Sell
     if ( OrderSend ( Symbol (),OP_SELLLIMIT,Lot,Open[ 0 ] + 10 * MyPoint,Slippage,Open[ 0 ] + StopLoss * MyPoint,Open[ 0 ],MyComment, 16523 ,OrderExpiriation, Red ) > 0 )
       {
       Alert ( "Третий ордер отжахан" );
       } else
       {
       Alert ( "Третий ордер не отжахан" );
       }
//---- Sending fourth order - Sell
     if ( OrderSend ( Symbol (),OP_SELLLIMIT,Lot,Open[ 0 ] + 15 * MyPoint,Slippage,Open[ 0 ] + StopLoss * MyPoint,Open[ 0 ],MyComment, 16523 ,OrderExpiriation, Red ) > 0 )
       {
       Alert ( "Четвертый ордер запущен" );
       } else
       {
       Alert ( "Четвертый ордер не запущен" );
       }

     }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
로그나 그 외 어디에도 오류가 없습니다. 코드에 오류가 없으면(글쎄, 갑자기 터미널에 버그가 있음) 시간이 지남에 따라 뭔가를 혼동했을 가능성이 더 큽니다.
 
rsi 기간을 변경할 수 없습니다.
 
kolyango :


마지막은 아직 완전히 형성되지 않은 것입니까?

감사합니다 도움이 되었지만 여전히 질문이 있습니다 스스로 해결해 보겠습니다
 

어렵지 않은 경우 도움이됩니다. 지능형 프로그래머에게는 모든 것이 운이 좋지 않습니다. 간단한 TS에 대한 고문을 작성했지만 올바르게 작동하지 않습니다!

따라서 그림을보고 2 MA의 교차점에서 주문을 여십시오. 빠른 것은 하단에서 느린 것을 교차합니다. 구매 및 그 반대의 경우도 마찬가지입니다.

1 - 베이 11/03/2011, 근처에 교차로가 없습니다.

3 - 2011년 11월 4일에 판매합니다.

5 - 2011년 11월 7일 구매, 다시 주문이 시작된 이유가 명확하지 않습니다.

그리고 코드 자체:

 extern int period_EMA = 85 ,
period_WMA = 5 ,
period_RSI = 14 ,
stoploss = 0 ,
takeprofit = 500 ,
risk = 10 ,
Magic = 777 ;
extern bool CloseCounter = false;
extern double Lot = 0.1 ;
extern int TrailingStop = 70 ; //если= 0, то трейлинг по фракталам или свечам
extern int Tip.Fr.or.Candl = 1 ; //если= 0, то трейлинг по фракталам 
//если= 1, то трейлинг по свечам
//--------------------------------------------------------------------
double SL,TP,LOT;
int TimeBar;
//--------------------------------------------------------------------
int start()
{
if (TimeBar==Time[ 0 ]) return ( 0 );
double EMA0 = iMA ( NULL , 0 ,period_EMA, 0 , MODE_EMA , PRICE_OPEN , 0 );
double WMA0 = iMA ( NULL , 0 ,period_WMA, 0 , MODE_LWMA , PRICE_OPEN , 0 );
double EMA1 = iMA ( NULL , 0 ,period_EMA, 0 , MODE_EMA , PRICE_OPEN , 1 );
double WMA1 = iMA ( NULL , 0 ,period_WMA, 0 , MODE_LWMA , PRICE_OPEN , 1 );
double RSI = iRSI ( NULL , 0 ,period_RSI, PRICE_OPEN , 0 );
if (EMA0 < WMA0 && EMA1 > WMA1 && RSI > 50 )
{
TimeBar=Time[ 0 ]; 
if (takeprofit!= 0 ) TP = Ask + takeprofit* Point ;
if (stoploss!= 0 ) SL = Ask - stoploss* Point ; 
LOT = LOT(risk, 1 );
if (CloseCounter) CLOSEORDER( "Sell" );
OPENORDER ( "Buy" );
}
if (EMA0 > WMA0 && EMA1 < WMA1 && RSI < 50 )
{
TimeBar=Time[ 0 ]; 
if (takeprofit!= 0 ) TP = Bid - takeprofit* Point ;
if (stoploss!= 0 ) SL = Bid + stoploss* Point ; 
LOT = LOT(risk, 1 );
if (CloseCounter) CLOSEORDER( "Buy" );
OPENORDER ( "Sell" );
}
TrailingStop();
return ( 0 );
}
//--------------------------------------------------------------------
void CLOSEORDER( string ord)
{
for ( int i= 0 ; i< OrdersTotal (); i++)
{ 
if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==true)
{
if ( OrderSymbol ()!= Symbol ()||Magic!= OrderMagicNumber ()) continue ;
if ( OrderType ()==OP_BUY && ord== "Buy" )
OrderClose ( OrderTicket (), OrderLots (),Bid, 3 , CLR_NONE );
if ( OrderType ()==OP_SELL && ord== "Sell" )
OrderClose ( OrderTicket (), OrderLots (),Ask, 3 , CLR_NONE );
} 
}
}
//--------------------------------------------------------------------
void OPENORDER( string ord)
{
int error;
if (ord== "Buy" ) error= OrderSend ( Symbol (),OP_BUY, LOT,Ask, 2 ,SL,TP, "EMA WMA RSI" ,Magic, 3 );
if (ord== "Sell" ) error= OrderSend ( Symbol (),OP_SELL,LOT,Bid, 2 ,SL,TP, "EMA WMA RSI" ,Magic, 3 );
if (error==- 1 ) ShowERROR(error, 0 , 0 );
return ;
} 
//--------------------------------------------------------------------
void ShowERROR( int Ticket, double SL, double TP)
{
int err= GetLastError ();
switch ( err )
{ 
case 1 : return ;
case 2 : Alert ( "Нет связи с торговым сервером " ,Ticket, " " , Symbol ()); return ;
case 130 : Alert ( "Error близкие стопы Ticket " , Ticket, " " , Symbol ()); return ;
case 134 : Alert ( "Недостаточно денег " , Ticket, " " , Symbol ()); return ;
case 146 : Alert ( "Error Подсистема торговли занята " , Ticket, " " , Symbol ()); return ;
case 129 : Alert ( "Error Неправильная цена " , Ticket, " " , Symbol ()); return ;
case 131 : Alert ( "Error Неправильный объем " , Ticket, " " , Symbol ()); return ;
default : Alert ( "Error " ,err, " Ticket " , Ticket, " " , Symbol ()); return ;
}
}
//--------------------------------------------------------------------
double LOT( int risk, int ord)
{
if (Lot!= 0 ) return (Lot);
double MINLOT = MarketInfo ( Symbol (),MODE_MINLOT);
LOT = AccountFreeMargin ()*risk/ 100 / MarketInfo ( Symbol (),MODE_MARGINREQUIRED)/ord;
if (LOT> MarketInfo ( Symbol (),MODE_MAXLOT)) LOT = MarketInfo ( Symbol (),MODE_MAXLOT);
if (LOT<MINLOT) LOT = MINLOT;
if (MINLOT< 0.1 ) LOT = NormalizeDouble (LOT, 2 ); else LOT = NormalizeDouble (LOT, 1 );
return (LOT);
}
//--------------------------------------------------------------------
void TrailingStop()
{
int tip,Ticket;
bool error;
double StLo,OSL,OOP;
for ( int i= 0 ; i< OrdersTotal (); i++) 
{ if ( OrderSelect (i, SELECT_BY_POS)==true)
{ tip = OrderType ();
if (tip< 2 && OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
{
OSL = OrderStopLoss ();
OOP = OrderOpenPrice ();
Ticket = OrderTicket ();
if (tip==OP_BUY) 
{
StLo = SlLastBar( 1 ,Bid,Tip.Fr.or.Candl,TrailingStop); 
if (StLo <= OOP) continue ;
if (StLo > OSL)
{ error= OrderModify (Ticket,OOP, NormalizeDouble (StLo, Digits ),
OrderTakeProfit (), 0 , White );
Comment ( "TrailingStop " ,Ticket, " " , TimeToStr ( TimeCurrent (),TIME_MINUTES));
Sleep ( 500 );
if (!error) Comment ( "Error order " ,Ticket, " TrailingStop " ,
GetLastError (), " " , Symbol (), " SL " ,StLo);
}
} 
if (tip==OP_SELL) 
{
StLo = SlLastBar(- 1 ,Ask,Tip.Fr.or.Candl,TrailingStop); 
if (StLo== 0 ) continue ; 
if (StLo >= OOP) continue ;
if (StLo < OSL || OSL== 0 )
{ error= OrderModify (Ticket,OOP, NormalizeDouble (StLo, Digits ),
OrderTakeProfit (), 0 , White );
Comment ( "TrailingStop " +Ticket, " " , TimeToStr ( TimeCurrent (),TIME_MINUTES));
Sleep ( 500 );
if (!error) Comment ( "Error order " ,Ticket, " TrailingStop " ,
GetLastError (), " " , Symbol (), " SL " ,StLo);
}
} 
}
}
}
}
//--------------------------------------------------------------------
double SlLastBar( int tip, double price, int tipFr, int tral)
{
double fr;
int jj,ii,delta= 5 ;
if (tral!= 0 )
{
if (tip== 1 ) fr = Bid - tral* Point ; 
else fr = Ask + tral* Point ; 
}
else
{
if (tipFr== 0 )
{
if (tip== 1 )
for (ii= 1 ; ii< 100 ; ii++) 
{
fr = iFractals ( NULL , 0 ,MODE_LOWER,ii);
if (fr!= 0 ) if (price-delta* Point > fr) break ;
else fr= 0 ;
}
if (tip==- 1 )
for (jj= 1 ; jj< 100 ; jj++) 
{
fr = iFractals ( NULL , 0 ,MODE_UPPER,jj);
if (fr!= 0 ) if (price+delta* Point < fr) break ;
else fr= 0 ;
}
}
else
{
if (tip== 1 )
for (ii= 1 ; ii< 100 ; ii++) 
{
fr = iLow ( NULL , 0 ,ii);
if (fr!= 0 ) if (price-delta* Point > fr) break ;
else fr= 0 ;
}
if (tip==- 1 )
for (jj= 1 ; jj< 100 ; jj++) 
{
fr = iHigh ( NULL , 0 ,jj);
if (price+delta* Point < fr) break ;
else fr= 0 ;
}
}
}
/* if (tip== 1)
{
ObjectDelete("SL Buy");
ObjectDelete("SL-");
ObjectCreate("SL Buy",OBJ_ARROW,0,TIME,fr,0,0,0,0); 
ObjectSet ("SL Buy",OBJPROP_ARROWCODE,6);
ObjectSet ("SL Buy",OBJPROP_COLOR, Blue);
ObjectCreate("SL-",OBJ_ARROW,0,TIME,price-delta*POINT,0,0,0,0); 
ObjectSet ("SL-",OBJPROP_ARROWCODE,4);
ObjectSet ("SL-",OBJPROP_COLOR, Blue);
}
if (tip==-1)
{
ObjectDelete("SL Sell");
ObjectDelete("SL+");
ObjectCreate("SL Sell",OBJ_ARROW,0,TIME,fr,0,0,0,0);
ObjectSet ("SL Sell",OBJPROP_ARROWCODE,6);
ObjectSet ("SL Sell", OBJPROP_COLOR, Green);
ObjectCreate("SL+",OBJ_ARROW,0,TIME,price+delta*POINT,0,0,0,0); 
ObjectSet ("SL+",OBJPROP_ARROWCODE,4);
ObjectSet ("SL+",OBJPROP_COLOR, Green);
}*/
return (fr);
}
//--------------------------------------------------------------------



미리 대단히 감사합니다!

 

안녕하세요. "2011.12.10 12:46:26 TestGenerator: 일치하지 않는 데이터 오류(2011.11.29 11:00에서 볼륨 제한 2225 초과)" 오류의 의미와 해결 방법을 알려주십시오....