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

 

안녕하세요.

MQL4 튜토리얼에서 질문이 있습니다.

위 또는 아래에서 MA를 전달할 때 메시지가 표시됩니까?

무엇이 잘못되었는지 적어 주십시오.

 bool Fact_Up= true ;
bool Fact_Dn = true ;
//-----------------------------------------------------------------
int start()
   {
   double MA;
//-----------------------------------------------------------------
   MA= iMA(NULL, 0 ,Period_MA, 0 ,MODE_SMA,PRICE_CLOSE, 0 );
//-----------------------------------------------------------------
   if (Bid > MA && Fact_Up == true )
      {
      Fact_Dn = true ;
      Fact_Up = false ;
      Alert( "Цена находится выше МА(" ,Period_MA, ")." );
      }
//------------------------------------------------------------------
   if (Bid < MA && Fact_Dn == true )
      {
      Fact_Up = true ;
      Fact_Dn = false ;
      Alert( "Цена находится ниже МА(" ,Period_MA, ")." );
      }
//------------------------------------------------------------------
   return ;
}
 
Pacman :

안녕하세요.

MQL4 튜토리얼에서 질문이 있습니다.

위 또는 아래에서 MA를 전달할 때 메시지가 표시됩니까?

무엇이 잘못되었는지 적어 주십시오.


테스터에서?
 
PapaYozh :

테스터에서?
아니요, 데모 계정 입니다.
 

안녕하세요,
개장 후 스톱을 손익분기점으로 재정렬하는 어드바이저를 만들고 있습니다. 즉, 순서를 수정하지만 후행 정지와 유사한 것을 지속적으로 수정한다는 것이 문제입니다. 한 번 수정되도록 만드는 방법. 그리고 그게 다야. 코드에서 mod1=1 인 변수도 삽입했지만 mod1 은 더 커야 하지만 어떤 이유에서인지 언어는 이를 인식하지 못합니다. 무엇이 문제가 될 수 있습니까?

감사하다!

동안(사실)
{
if (tip==0 && open_b==true && mod1<=1 && Bid>ma+15*Point)
{
경고 ("popitkaa pereneti stop vb/u", 티켓);
새로 고침();
modify=OrderModify(티켓, 요청, 입찰 모드*포인트, 0,0);
if(수정==참)
{
Alert("자크리트 수정 주문",티켓);
모드1++;
반품;
}
반품;
}
if (tip==1 && open_s==true && mod1<=1 && Bid<ma+15*Point)
{
Alert("popitkaa pereneti stop " ,티켓, "vb/u");
새로 고침();
modify=OrderModify(티켓,입찰,매도+수정*포인트,0,0);
if(수정==참)
{
Alert("자크리트 수정 주문",티켓);
모드1++;
반품;
}
반품;
}
부서지다;
}

 
'00FF33' - 잘못된 숫자 C:\Alupari\experts\expert.mq4 (66, 173) ??? 색상을 올바르게 입력하는 방법은 무엇입니까?
 
kostikk :

안녕하세요,
개장 후 스톱을 손익분기점으로 재정렬하는 어드바이저를 만들고 있습니다. 즉, 순서를 수정하지만 후행 정지와 유사한 것을 지속적으로 수정한다는 것이 문제입니다. 한 번 수정되도록 만드는 방법. 그리고 그게 다야. 코드에서 mod1=1 인 변수도 삽입했지만 mod1 은 더 커야 하지만 어떤 이유에서인지 언어는 이를 인식하지 못합니다. 무엇이 문제가 될 수 있습니까?

감사하다!

모든 것이 이미 완료되었으며 훌륭하게 작동합니다.

KimIV 01.11.2006 18:49

테스트한 코드 추천
 extern int    LevelProfit  = 30 ;            // Уровень профита
extern int    LevelWLoss   = 2 ;             // Уровень безубытка
extern color  clModifyBuy  = Aqua ;          // Цвет модификации покупки
extern color  clModifySell = Tomato ;        // Цвет модификации продажи
 
 
//+----------------------------------------------------------------------------+
//|  Перенос уровня StopLoss                                                   |
//|  Параметры:                                                                |
//|    ldStop  - уровень StopLoss                                              |
//|    lcColor - цвет модификации                                              |
//+----------------------------------------------------------------------------+
void ModifyStopLoss ( double ldStop , color lcColor = CLR_NONE ) {
  double ldOpen = OrderOpenPrice () ;
  double ldTake = OrderTakeProfit () ;
 
  OrderModify ( OrderTicket () , ldOpen , ldStop , ldTake , 0 , lcColor ) ;
}
 
//+----------------------------------------------------------------------------+
//|  Перенос стопа в безубыток                                                 |
//+----------------------------------------------------------------------------+
void MovingInWL () {
  int i , k = OrdersTotal () ;
 
  for ( i = 0 ; i < k ; i ++ ) {
    if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
      if ( OrderSymbol () == Symbol ()) {
        if ( OrderType () == OP_BUY ) {
          if ( OrderStopLoss () - OrderOpenPrice () < LevelWLoss * Point ) {
            if ( Bid - OrderOpenPrice () > LevelProfit * Point ) {
              ModifyStopLoss ( OrderOpenPrice () + LevelWLoss * Point , clModifyBuy ) ;
            }
          }
        }
        if ( OrderType () == OP_SELL ) {
          if ( OrderStopLoss () == 0 || OrderOpenPrice () - OrderStopLoss () < LevelWLoss * Point ) {
            if ( OrderOpenPrice () - Ask > LevelProfit * Point ) {
              ModifyStopLoss ( OrderOpenPrice () - LevelWLoss * Point , clModifySell ) ;
            }
          }
        }
      }
    }
  }
}
//+----------------------------------------------------------------------------+



https://forum.mql4.com/en/4689

 
Dimka-novitsek :
'00FF33' - 잘못된 숫자 C:\Alupari\experts\expert.mq4 (66, 173) ??? 색상을 올바르게 입력하는 방법은 무엇입니까?


실제로 언어에는 색상이라는 특수한 유형의 변수가 있습니다. 예를 들어:

이중 값;

색상마이라인;

크기=2.569;

MyLine=빨간색;

 

차트 창 이름을 변경하는 방법은 무엇입니까?

 

돕다! 어떤 이유로, 그것은 SELL 포지션을 열지 않고 BUY 만 열 수 있습니다???



#property copyright "eevviill"
#property link "itisallillusion@gmail.com"


extern string os = "Настройки лота и стопов";
extern double Lot = 0.1;
extern bool use_percent_of_deposit = false;
extern double Risk = 1;
extern int StopLoss = 0;
extern int TakeProfit = 0;

extern string slug = "Дополнительные настройки";
extern string pus1 = "";
extern bool use_exit = true;
extern int slippage = 2;
extern int magic = 4335;
extern string comment = "HA nonlag";
extern int MaxAttempts = 4;

extern string pus2 = "";
extern string V_R = "Время работы";
extern bool use_work_time = true;
extern int Start = 0;
extern int Stop = 24;

extern string pus3 = "";
extern string mar = "Мартингейл";
extern bool use_martini = false;
extern int CloseProfit_pips = 22;
extern double Lot_koef = 1.6;
extern int step = 40;

extern string pus4 = "";
extern string bez_ub = "Безубыток";
extern bool use_bezubitok = false;
extern int Bez_Ub_Level = 8;
extern int Bez_Ub_Size = 1;

extern string pus5 = "";
extern string tre_st = "Трейлинг стоп";
extern bool use_traling_stop = false;
extern int Trailing_Stop = 10;

extern string pus6 = "";
extern string ATR_p = "ATR";
extern bool use_ATR = false;
extern int ATR_period = 14;
extern double ATR_min_level = 0.0004;

extern string pus7 = "";
extern string ind1 = "HA nonlagma v4";
extern int Price = 0;
extern int Length = 21;
extern int Displace = 0;
extern int Filter = 0;
extern int Color = 1;
extern int ColorBarBack = 0;
extern double Deviation = 0;

extern double Cycle = 4;






double SLbuy=0, SLsell=0, TPbuy=0, TPsell=0;
int buy,sell,Sig_p,Sig_ex_p;
static int prevtime = 0;





//////////////////////////////////////////////////////////////
int init()
{
prevtime = iTime(Symbol(),0,0);


//ATR_level(4) && JPY_Point
if (StringFind(Symbol(), "JPY", 0) != -1) ATR_min_level *=100;


return;
}





////////////////////////////////////////////////////////////
int start(){
if (iTime(Symbol(), 0, 0) == prevtime) {Sleep(50);return(0);}
prevtime = iTime(Symbol(),0,0);

//проверка на разрешение торговли от брокера
while(!IsTradeAllowed()) Sleep(2000);

//фильтр ATR
if(use_ATR)
{
double ATR = iATR(Symbol(),0,ATR_period,1);
if(ATR<ATR_min_level) return;
}

//фильтр время
if(use_work_time)
{
if(Hour()<Start || Hour()>=Stop) return;
}

//мартингейл
if(use_martini) {use_bezubitok=false;use_traling_stop=false;use_percent_of_deposit=false;use_exit=false;}
if(use_martini) martini_f();

//закрытие всех ордеров при общем профите(пункты)- для мартини
if(use_martini)
{
if(Profit_f()>=CloseProfit_pips) Close_f();
}

//трейлинг стоп
if((Bez_Ub_Level>Trailing_Stop) && use_traling_stop) use_bezubitok=false;
if(use_traling_stop) Traling_Stop_f();

//безубыток
if(use_bezubitok) BezUb();

//SL && TP
if(!use_martini)
{
if(StopLoss>0) {SLbuy=NormalizeDouble(Ask-StopLoss*Point,Digits); SLsell=NormalizeDouble(Bid+StopLoss*Point,Digits);}
if(TakeProfit>0) {TPbuy=NormalizeDouble(Ask+TakeProfit*Point,Digits);TPsell=NormalizeDouble(Bid-TakeProfit*Point,Digits);}
}

//расчёт лота от % депозита
if(use_percent_of_deposit) Lot=GetLot();

//Сигнал на вход
Sig_p =Sig_f();
//Сигнал на выход
Sig_ex_p = Sig_ex_f();


//Выход
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
{
if(OrderMagicNumber()==magic)
{
bool ticket_ex;
for (int j_ex = 0;j_ex < MaxAttempts; j_ex++)
{
while(IsTradeContextBusy()) Sleep(2000);

if(OrderType()==OP_BUY && ((use_exit && Sig_p<0))) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow);
if(OrderType()==OP_SELL && ((use_exit && Sig_p>0))) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow);
if(ticket_ex==true)break;
}
}
}
}


//подсчёт открытых позиций
CountOpenPositions();

//Вход
int ticket_op=0;
for (int j_op = 0; j_op < MaxAttempts; j_op++)
{
while(IsTradeContextBusy()) Sleep(2000);

if(Sig_p>0 && buy==0&& sell==0) ticket_op=OrderSend(Symbol(),OP_BUY,Lot,Ask,slippage,SLbuy,TPbuy,comment,magic,0,Green);
if(Sig_p<0 && sell==0&& buy==0) ticket_op=OrderSend(Symbol(),OP_SELL,Lot,Bid,slippage,SLsell,TPsell,comment,magic,0,OrangeRed);
if(ticket_op>-1)break;
}





return(0);
}








//расчёт функций
/////////////////////////////////////////////////////////////////////////////////////////////
int Sig_f()
{
//объявление индикаторов
double ind1 = iCustom(Symbol(),0,"Heiken_ashi_nonlagma_v4",Price,Length,Displace,Filter,Color,ColorBarBack,Deviation,1,1); //buy
double ind2 = iCustom(Symbol(),0,"Heiken_ashi_nonlagma_v4",Price,Length,Displace,Filter,Color,ColorBarBack,Deviation,2,1); //sell


//сигнал для бай
if(ind1<50000) return(1);

//сигнал для сел
if(ind2<50000) return(-1);


return(0);
}

/////////////////////////////////////////////////////////////////////////////////////////////
int Sig_ex_f()
{
//объявление индикаторов
double ind1 = iCustom(Symbol(),0,"Heiken_ashi_nonlagma_v4",Price,Length,Displace,Filter,Color,ColorBarBack,Deviation,1,1); //exit sell
double ind2 = iCustom(Symbol(),0,"Heiken_ashi_nonlagma_v4",Price,Length,Displace,Filter,Color,ColorBarBack,Deviation,2,1); //exit buy


//сигнал для выход селл
if(ind1<50000) return(1);

//сигнал для выход бай
if(ind2<50000) return(-1);



return(0);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double GetLot()
{
double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
if(Lot*One_Lot>Free) return(0.0);

return(Lot);
}

////////////////////////////////////////////////////////////////
void BezUb()
{
for (int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS);
{
if (OrderMagicNumber()==magic)
{
if (OrderType()==OP_BUY)
{
if(OrderStopLoss()!=OrderOpenPrice()+NormalizeDouble(Bez_Ub_Size*Point,Digits))
{
if (Bid>OrderOpenPrice()+Bez_Ub_Level*Point && (OrderStopLoss()<OrderOpenPrice() || OrderStopLoss()==0))
{
OrderModify(OrderTicket(),0,OrderOpenPrice()+NormalizeDouble(Bez_Ub_Size*Point,Digits),OrderTakeProfit(),0,Blue);
}
}
}


if (OrderType()==OP_SELL)
{
if(OrderStopLoss()!=OrderOpenPrice()-NormalizeDouble(Bez_Ub_Size*Point,Digits))
{
if (Ask<OrderOpenPrice()-Bez_Ub_Level*Point && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0))
{
OrderModify(OrderTicket(),0,OrderOpenPrice()-NormalizeDouble(Bez_Ub_Size*Point,Digits),OrderTakeProfit(),0,Blue);
}
}
}
}
}
}
}

///////////////////////////////////////////////////////////////////////////
void Traling_Stop_f()
{
for (int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS);
{
if (OrderMagicNumber()==magic)
{
double Or_St_Lo = OrderStopLoss();
double Or_Op_Pr = OrderOpenPrice();
if(Or_St_Lo==0) Or_St_Lo=Or_Op_Pr;
if((OrderStopLoss()!=Or_St_Lo+NormalizeDouble(Trailing_Stop*Point,Digits)) || (OrderStopLoss()!=Or_St_Lo-NormalizeDouble(Trailing_Stop*Point,Digits)))
{
if (OrderType()==OP_BUY && Bid-Or_St_Lo>=Trailing_Stop*Point && Bid>Or_St_Lo && ((Bid-Or_St_Lo+Trailing_Stop*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))) OrderModify(OrderTicket(),0,Or_St_Lo+NormalizeDouble(Trailing_Stop*Point,Digits),OrderTakeProfit(),0,LightBlue);
if(OrderType()==OP_SELL && Or_St_Lo-Ask>=Trailing_Stop*Point && Ask<Or_St_Lo && ((Or_St_Lo-Trailing_Stop*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))) OrderModify(OrderTicket(),0,Or_St_Lo-NormalizeDouble(Trailing_Stop*Point,Digits),OrderTakeProfit(),0,OrangeRed);
}
}
}
}

}

///////////////////////////////////////////////////////////////////////////////////
void martini_f()
{
int nor_lot;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1) nor_lot=1;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01) nor_lot=2;

CountOpenPositions();

double Mar_Lot_b=Lot*buy*Lot_koef;
double Mar_Lot_s=Lot*sell*Lot_koef;

for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
{
if(OrderMagicNumber()==magic)
{
if(OrderSymbol()==Symbol())
{
break;
}
}
}
}



if(OrderType()==OP_BUY)
{
//
if(Bid<=OrderOpenPrice()-step*Point) OrderSend(Symbol(),OP_BUY,NormalizeDouble(Mar_Lot_b,nor_lot),Ask,slippage,0,0,comment,magic,0,Green);
}


if(OrderType()==OP_SELL)
{
//
if(Ask>=OrderOpenPrice()+step*Point) OrderSend(Symbol(),OP_SELL,NormalizeDouble(Mar_Lot_s,nor_lot),Bid,slippage,0,0,comment,magic,0,OrangeRed);
}



}

///////////////////////////////////////////////////////////////////////////////////
int Profit_f()
{
int prof;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic)
{
if (OrderType()==OP_BUY) prof+=(Bid - OrderOpenPrice())/Point;
if (OrderType()==OP_SELL) prof+=(OrderOpenPrice()-Ask) /Point;
}
}
}

return(prof);
}

////////////////////////////////////////////////////////////////////////////////////
void CountOpenPositions()
{
buy=0;
sell=0;

for (int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
{
if(OrderMagicNumber()==magic)
{
if(OrderType()==OP_BUY) buy++;
if(OrderType()==OP_SELL) sell++;
}
}
}

}

////////////////////////////////////////////////////////////////////////////////
void Close_f()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
{
if(OrderMagicNumber()==magic)
{
if(OrderSymbol()==Symbol())
{
bool ticket_ex;
for (int j_ex = 0;j_ex < MaxAttempts; j_ex++)
{
while(IsTradeContextBusy()) Sleep(2000);

if(OrderType()==OP_BUY ) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow);
if(OrderType()==OP_SELL) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow);
if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMIT) ticket_ex=OrderDelete(OrderTicket(),CLR_NONE);
if(ticket_ex==true)break;
}
}
}
}
}

}

미리 감사드립니다!
 

설명서에 따르면 SetIndexEmptyValue 함수는 "빈" 값을 지정하는 데 사용됩니다. 즉, 아무 것도 그릴 필요가 없는 값을 나타냅니다. 신호가 모든 막대에서 발견되지 않기 때문에 이것은 우리의 경우 매우 편리합니다. 이렇게 작동합니다. 현재 막대에 화살표를 표시할 필요가 없으면 데이터 버퍼의 해당 요소(이 경우 0)에 "빈" 값을 할당합니다.

내가 입력하지 않는 것. 신호에 무언가가 그려지면 신호 없이 그려지지 않습니다. 그렇다면 이 기능의 요점은 무엇입니까?