무료로 어드바이저를 작성해 드립니다 - 페이지 21

 
Vitalii Ananev :

그가 캔들 D1을 여는 순간 거래를 열겠다는 뜻입니까? 그렇다면 고문의 논리에서 지정된 시간에만 거래를 여는 조건을 설정하십시오.

분명한. 그리고 이 질문: 나는 바이스톱과 셀스톱 가격에서 +15포인트에 두 개의 지연을 넣었습니다. 그리고 각 틱마다 새로운 가격으로 재정렬합니다. 가격이 급격한 가격 움직임(대부분 뉴스와 함께)으로 가격에 닿자마자 터미널이 멈춥니다. (이것은 모두 테스터에 있습니다. 저는 데모와 실생활을 보지 않았습니다) 왜 멈추나요?
 
MIR_KAZAN :
분명한. 그리고 그런 질문: 나는 바이스톱과 셀스톱의 가격에서 +15포인트에 두 개의 지연을 넣었습니다. 그리고 매 틱마다 새로운 가격으로 재정렬합니다. 가격이 급격한 가격 움직임(대부분 뉴스와 함께)으로 가격에 닿자마자 터미널이 멈춥니다. (이것은 모두 테스터에 있습니다. 저는 데모와 실생활을 보지 않았습니다) 왜 멈추나요?

나는 동결의 이유에 대해 말할 수 없습니다. 나는 심령이 아닙니다. 전문가의 코드를 다루십시오. 주문이 실행된 후 Expert Advisor가 새로운 가격으로 재정렬을 시도하지만 보류 중인 주문 이 이미 시장에 나와 있기 때문에 Expert Advisor가 멈춘다고 가정할 수 있습니다. 작업의 논리를 분석하기 위해 주요 EA 변수의 상태를 기록해 보십시오.

 
Vitalii Ananev :

나는 동결의 이유에 대해 말할 수 없습니다. 나는 심령이 아닙니다. 전문가의 코드를 다루십시오. 주문이 실행된 후 Expert Advisor가 새로운 가격으로 재정렬을 시도하지만 보류 중인 주문 이 이미 시장에 나와 있기 때문에 Expert Advisor가 멈춘다고 가정할 수 있습니다. 작업의 논리를 분석하기 위해 주요 EA 변수의 상태를 기록해 보십시오.

확인을 위한 모든 조건이 올바르게 설정된 것 같습니다.

input int    Magic = 12;          // Магический номер ордеров
input int    Proskalzivanie = 5;  // Проскальзывание
input int    period = 200;        // Количество свечей для анализа волятильности
input int    tral = 20;           // Дистанция траллинга в пунктах
input int    tral_step = 3;       // Шаг срабатывания траллинга
input bool   use_step = true;     // Использовать шаг
input double Lot = 0.01;          // Лот
input double otstups = 0.0006;    // Отступ от цены
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void Trailing_Stop(string _Simvol, int _Magic, double _Tral, double _Step, bool _Step_Use)
{
 int Dig=int(MarketInfo(_Simvol,MODE_DIGITS));
 for (int pos=OrdersTotal()-1; pos>=0; pos--)
 {
  if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol &&
     OrderMagicNumber()==_Magic && OrderType()<2)
     {
      double SLPrice;
      if (OrderType()==OP_BUY)
      {
       if (_Step_Use)
       {
        RefreshRates();
        if(NormalizeDouble(Ask-OrderStopLoss(),Dig)>NormalizeDouble(_Tral+_Step,Dig))
        {
         SLPrice=NormalizeDouble(Ask-_Tral,Dig);
         if(!OrderModify(OrderTicket(),0,SLPrice,OrderTakeProfit(),OrderExpiration(),clrRed))
           Alert("Ошибка модификации ордера: ",GetLastError());
        }
       }
       else
       {
        RefreshRates();
        if(NormalizeDouble(Ask-OrderStopLoss(),Dig)>NormalizeDouble(_Tral,Dig))
         {
          SLPrice=NormalizeDouble(Bid+_Tral,Dig);
          if(!OrderModify(OrderTicket(),0,SLPrice,OrderTakeProfit(),OrderExpiration(),clrRed))
           Alert("Ошибка модификации ордера: ",GetLastError());
         }
       }
      }
    }
  }
}

void OnTick()
  {
//---
  double lot=Lot_Normalize(Symbol(),Lot,1);
  double sl= Dist_Normalize(Symbol(),tral);
  double step=Dist_Normalize(Symbol(),tral_step);
  double otstup=NormalizeDouble(otstups,Digits);
  int ord[8];
  Uchet_Orderov_Function(Symbol(),Magic,ord);
  if(ord[7]==2 && ord[6]==0 && Volume[0]==1)
   {
    Udalenie_Orderov_I_Sdelok(Symbol(),Magic, Proskalzivanie);
    if (OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+otstup, Proskalzivanie,Ask+otstup-sl,0,NULL,Magic,0,clrBlue)==-1||
    OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-otstup, Proskalzivanie,Bid-otstup+sl,0,NULL,Magic,0,clrRed)==-1)
    Print("Ошибка установки ордеров",GetLastError());
   }
  if (ord[6]==0 && ord[7]==0 && Volume[0]==1)
   {
    if (OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+otstup, Proskalzivanie,Ask+otstup-sl,0,NULL,Magic,0,clrBlue)==-1||
    OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-otstup, Proskalzivanie,Bid-otstup+sl,0,NULL,Magic,0,clrRed)==-1)
    Print("Ошибка установки ордеров",GetLastError());
   }
  if (ord[6]==1)
  {
   Trailing_Stop(Symbol(),Magic,sl,step,use_step);
   for(int i=OrdersTotal()-1; i>0; i++)
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && OrderType()>1)
    if (!OrderDelete(OrderTicket(),clrNONE))
      Print("Ошибка удаления ордера!: ", GetLastError());
  }
}
//+------------------------------------------------------------------+
// Средняя волятильность свечей
//+------------------------------------------------------------------+
double Volatility(int _period)
{
 double summ=0;
 for (int i=1; i<=_period; i++)
  {
   summ+=MathAbs(High[i]-Low[i]);
  }
 return(NormalizeDouble(summ/_period,Digits));
}
//+------------------------------------------------------------------+
// Нормализация лота для любых брокеров
//+------------------------------------------------------------------+
double Lot_Normalize(string _Symvol, double _lot, double _mult)
{
 double minlot = MarketInfo(_Symvol,MODE_MINLOT);
 double maxlot = MarketInfo(_Symvol,MODE_MAXLOT);
 double steplot = MarketInfo(_Symvol,MODE_LOTSTEP);
 double lot=_lot*_mult;
 if (lot<=minlot)lot=minlot;
 else if(lot>=maxlot) lot=maxlot;
 else if (lot>minlot && lot<maxlot)
 {
  int k=int((lot-minlot)/steplot);
  lot=NormalizeDouble(minlot+k*steplot,2);
 }
 return(lot);
}

double Dist_Normalize(string _Simvol, int _Distancia)
{
 int Dig=int(MarketInfo(_Simvol,MODE_DIGITS));
 double Pip=MarketInfo(_Simvol,MODE_POINT);
 if(Dig==3 || Dig==5)
  return NormalizeDouble(_Distancia*5*Pip,Dig);
 else return NormalizeDouble(_Distancia*Pip,Dig);
}
//+------------------------------------------------------------------+
// Учет ордеров
//+------------------------------------------------------------------+
void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8])
{
 ArrayInitialize(_Mas,0);
 int Ticket=-1;
 for (int pos=OrdersTotal()-1; pos>=0; pos--)
 {
  if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol &&
    OrderMagicNumber()==_Magic && OrderTicket()!=Ticket)
    {
     Ticket=OrderTicket();
     switch(OrderType())
     {
      case 0:{_Mas[0]++;_Mas[6]++;break;}
      case 1:{_Mas[1]++;_Mas[6]++;break;}
      case 2:{_Mas[2]++;_Mas[7]++;break;}
      case 3:{_Mas[3]++;_Mas[7]++;break;}
      case 4:{_Mas[4]++;_Mas[7]++;break;}
      case 5:{_Mas[5]++;_Mas[7]++;break;}
     }
    }
  }
}

void Udalenie_Orderov_I_Sdelok(string _Simvol, int _Magic, int _Proskalzivanie)
{
 for(int pos=OrdersTotal()-1; pos>=0; pos--)
 {
  if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol && OrderMagicNumber()== _Magic)
  {
   if(OrderType()>1)
   {
    if (!OrderDelete(OrderTicket(),clrNONE))
     Alert("Ошибка при удалении отложенного ордера!" , GetLastError());
   }
  else
   {
    if (OrderType()==OP_BUY)
    {
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,_Proskalzivanie,clrNONE))
       Alert("Ошибка закрытия ордера! ",GetLastError());
    }
    else
    {
     if(!OrderClose(OrderTicket(),OrderLots(),Ask,_Proskalzivanie,clrNONE))
       Alert("Ошибка закрытия ордера! ",GetLastError());
    }
   }
  }
}

}

 
khorosh :
구매 한도는 가격 아래에서만 설정할 수 있고 판매 한도는 가격 이상으로 설정할 수 있다는 점을 고려하지 않았습니다. 당신이 제공하는 것을 위해 당신은 정지 주문 을 사용해야합니다.

동의합니다. 제 혼란스러운 알고리즘을 이해해 주셔서 감사합니다. 연기자들 이름 아직도 헷갈리네...

잠시 멈추고 고문을 쌓아 볼까요?

그런 다음 테스트하고 어떤 일이 발생하는지 보여줄 것입니다.

... 또는 pliz가 미국을 발견하지 못했기 때문에 하나에 대한 링크를 제공합니까?

 
MIR_KAZAN :

확인을 위한 모든 조건이 올바르게 설정된 것 같습니다.

input int    Magic = 12;          // Магический номер ордеров
input int    Proskalzivanie = 5;  // Проскальзывание
input int    period = 200;        // Количество свечей для анализа волятильности
input int    tral = 20;           // Дистанция траллинга в пунктах
input int    tral_step = 3;       // Шаг срабатывания траллинга
input bool   use_step = true;     // Использовать шаг
input double Lot = 0.01;          // Лот
input double otstups = 0.0006;    // Отступ от цены
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void Trailing_Stop(string _Simvol, int _Magic, double _Tral, double _Step, bool _Step_Use)
{
 int Dig=int(MarketInfo(_Simvol,MODE_DIGITS));
 for (int pos=OrdersTotal()-1; pos>=0; pos--)
 {
  if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol &&
     OrderMagicNumber()==_Magic && OrderType()<2)
     {
      double SLPrice;
      if (OrderType()==OP_BUY)
      {
       if (_Step_Use)
       {
        RefreshRates();
        if(NormalizeDouble(Ask-OrderStopLoss(),Dig)>NormalizeDouble(_Tral+_Step,Dig))
        {
         SLPrice=NormalizeDouble(Ask-_Tral,Dig);
         if(!OrderModify(OrderTicket(),0,SLPrice,OrderTakeProfit(),OrderExpiration(),clrRed))
           Alert("Ошибка модификации ордера: ",GetLastError());
        }
       }
       else
       {
        RefreshRates();
        if(NormalizeDouble(Ask-OrderStopLoss(),Dig)>NormalizeDouble(_Tral,Dig))
         {
          SLPrice=NormalizeDouble(Bid+_Tral,Dig);
          if(!OrderModify(OrderTicket(),0,SLPrice,OrderTakeProfit(),OrderExpiration(),clrRed))
           Alert("Ошибка модификации ордера: ",GetLastError());
         }
       }
      }
    }
  }
}

void OnTick()
  {
//---
  double lot=Lot_Normalize(Symbol(),Lot,1);
  double sl= Dist_Normalize(Symbol(),tral);
  double step=Dist_Normalize(Symbol(),tral_step);
  double otstup=NormalizeDouble(otstups,Digits);
  int ord[8];
  Uchet_Orderov_Function(Symbol(),Magic,ord);
  if(ord[7]==2 && ord[6]==0 && Volume[0]==1)
   {
    Udalenie_Orderov_I_Sdelok(Symbol(),Magic, Proskalzivanie);
    if (OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+otstup, Proskalzivanie,Ask+otstup-sl,0,NULL,Magic,0,clrBlue)==-1||
    OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-otstup, Proskalzivanie,Bid-otstup+sl,0,NULL,Magic,0,clrRed)==-1)
    Print("Ошибка установки ордеров",GetLastError());
   }
  if (ord[6]==0 && ord[7]==0 && Volume[0]==1)
   {
    if (OrderSend(Symbol(),OP_BUYSTOP,lot,Ask+otstup, Proskalzivanie,Ask+otstup-sl,0,NULL,Magic,0,clrBlue)==-1||
    OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-otstup, Proskalzivanie,Bid-otstup+sl,0,NULL,Magic,0,clrRed)==-1)
    Print("Ошибка установки ордеров",GetLastError());
   }
  if (ord[6]==1)
  {
   Trailing_Stop(Symbol(),Magic,sl,step,use_step);
   for(int i=OrdersTotal()-1; i>0; i++)
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && OrderType()>1)
    if (!OrderDelete(OrderTicket(),clrNONE))
      Print("Ошибка удаления ордера!: ", GetLastError());
  }
}
//+------------------------------------------------------------------+
// Средняя волятильность свечей
//+------------------------------------------------------------------+
double Volatility(int _period)
{
 double summ=0;
 for (int i=1; i<=_period; i++)
  {
   summ+=MathAbs(High[i]-Low[i]);
  }
 return(NormalizeDouble(summ/_period,Digits));
}
//+------------------------------------------------------------------+
// Нормализация лота для любых брокеров
//+------------------------------------------------------------------+
double Lot_Normalize(string _Symvol, double _lot, double _mult)
{
 double minlot = MarketInfo(_Symvol,MODE_MINLOT);
 double maxlot = MarketInfo(_Symvol,MODE_MAXLOT);
 double steplot = MarketInfo(_Symvol,MODE_LOTSTEP);
 double lot=_lot*_mult;
 if (lot<=minlot)lot=minlot;
 else if(lot>=maxlot) lot=maxlot;
 else if (lot>minlot && lot<maxlot)
 {
  int k=int((lot-minlot)/steplot);
  lot=NormalizeDouble(minlot+k*steplot,2);
 }
 return(lot);
}

double Dist_Normalize(string _Simvol, int _Distancia)
{
 int Dig=int(MarketInfo(_Simvol,MODE_DIGITS));
 double Pip=MarketInfo(_Simvol,MODE_POINT);
 if(Dig==3 || Dig==5)
  return NormalizeDouble(_Distancia*5*Pip,Dig);
 else return NormalizeDouble(_Distancia*Pip,Dig);
}
//+------------------------------------------------------------------+
// Учет ордеров
//+------------------------------------------------------------------+
void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8])
{
 ArrayInitialize(_Mas,0);
 int Ticket=-1;
 for (int pos=OrdersTotal()-1; pos>=0; pos--)
 {
  if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol &&
    OrderMagicNumber()==_Magic && OrderTicket()!=Ticket)
    {
     Ticket=OrderTicket();
     switch(OrderType())
     {
      case 0:{_Mas[0]++;_Mas[6]++;break;}
      case 1:{_Mas[1]++;_Mas[6]++;break;}
      case 2:{_Mas[2]++;_Mas[7]++;break;}
      case 3:{_Mas[3]++;_Mas[7]++;break;}
      case 4:{_Mas[4]++;_Mas[7]++;break;}
      case 5:{_Mas[5]++;_Mas[7]++;break;}
     }
    }
  }
}

void Udalenie_Orderov_I_Sdelok(string _Simvol, int _Magic, int _Proskalzivanie)
{
 for(int pos=OrdersTotal()-1; pos>=0; pos--)
 {
  if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol && OrderMagicNumber()== _Magic)
  {
   if(OrderType()>1)
   {
    if (!OrderDelete(OrderTicket(),clrNONE))
     Alert("Ошибка при удалении отложенного ордера!" , GetLastError());
   }
  else
   {
    if (OrderType()==OP_BUY)
    {
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,_Proskalzivanie,clrNONE))
       Alert("Ошибка закрытия ордера! ",GetLastError());
    }
    else
    {
     if(!OrderClose(OrderTicket(),OrderLots(),Ask,_Proskalzivanie,clrNONE))
       Alert("Ошибка закрытия ордера! ",GetLastError());
    }
   }
  }
}

}

귀하의 코드는 구문 분석할 수 없기 때문에 도와드릴 수 없습니다. 이해를 돕기 위해 주석을 추가할 수도 있습니다. ord[] 배열이 무엇에 사용되고 어떤 데이터를 저장하는지 명확하지 않습니다. 귀하의 코드를 다음과 같이 이해했습니다. 매 틱마다 배열에 주문 유형을 작성합니다(Uchet_Orderov_Function(Symbol(),Magic,ord);) if(ord[7]==2 && ord[6] ==0 && Volume[ 0]==1) true이면 보류 중인 주문이 삭제 되고 모든 거래가 닫힙니다. 그런 다음 if(ord[6]==0 && ord[7]==0 && Volume[0]==1) 조건이 확인되고 이것이 참이면 두 개의 보류 주문이 열립니다. 그러나 동시에 if 조건(ord[6]==0 && ord[7]==0 && Volume[0]==1)을 확인하기 전 ord[] 배열의 값은 업데이트되지 않습니다. 그리고 두 번째 틱에서만 업데이트됩니다.

일반적으로 작업 논리에 영향을 미치는 ord[] 배열의 모든 값 상태를 기록합니다.

또한 다음 코드를 살펴보십시오.

 if (ord[ 6 ]== 1 )
  {
   Trailing_Stop( Symbol (),Magic,sl,step,use_step);
   for ( int i= OrdersTotal ()- 1 ; i> 0 ; i++)
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic && OrderSymbol()== Symbol () && OrderType()> 1 )
     if (!OrderDelete(OrderTicket(), clrNONE ))
       Print ( "Ошибка удаления ордера!: " , GetLastError ());
  } 

제 생각에는 프로그램 괄호 { 가 충분하지 않습니다. 이론상 다음과 같아야 합니다.

 if (ord[ 6 ]== 1 )
  {
   Trailing_Stop( Symbol (),Magic,sl,step,use_step);
   for ( int i= OrdersTotal ()- 1 ; i> 0 ; i++)
   {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic && OrderSymbol()== Symbol () && OrderType()> 1 )
       if (!OrderDelete(OrderTicket(), clrNONE ))
           Print ( "Ошибка удаления ордера!: " , GetLastError ());
   }
  } 
 
Vitalii Ananev :


또한 다음 코드를 살펴보십시오.

제 생각에는 프로그램 괄호 { 가 충분하지 않습니다. 이론상 다음과 같아야 합니다.

이 경우 괄호는 작업(논리)에 영향을 미치지 않습니다. 오류 없음

 
Victor Nikolaev :

이 경우 괄호는 작업(논리)에 영향을 미치지 않습니다. 오류 없음

아닐 수도 있지만 더 읽기 쉽습니다.
 
akarustam :

동의합니다. 제 혼란스러운 알고리즘을 이해해 주셔서 감사합니다. 연기자들 이름 아직도 헷갈리네...

잠시 멈추고 고문을 쌓아 볼까요?

그런 다음 테스트하고 어떤 일이 발생하는지 보여줄 것입니다.

... 또는 pliz가 미국을 발견하지 못했기 때문에 하나에 대한 링크를 제공합니까?

무언가를 제공하려면 최소한 기초 지식이 있어야 합니다. 모든 간단한 아이디어는 오랫동안 테스트되었으며 실제로 미국을 발견하지 못했습니다. 그러나 포럼과 코드 기반에서 링크를 찾는 사람은 거의 없습니다. 당신은 필요합니다 - 당신이 찾고 있습니다. 아니면 모든 종류의 Expert Advisor, 스크립트 및 지표에 대한 링크를 염두에 두고 있는 사람들이 있다고 생각하십니까?
 
khorosh :
무언가를 제공하려면 최소한 기초 지식이 있어야 합니다. 모든 간단한 아이디어는 오랫동안 테스트되었으며 실제로 미국을 발견하지 못했습니다. 그러나 포럼과 코드 기반에서 링크를 찾는 사람은 거의 없습니다. 당신은 필요합니다 - 당신이 찾고 있습니다. 아니면 모든 종류의 Expert Advisor, 스크립트 및 지표에 대한 링크를 염두에 두고 있는 사람들이 있다고 생각하십니까?
... 생각.
 

아이디어가 있습니다. 도움이 필요합니다.)) 아래에 고문을 작성하십시오.

실제로 Masha이지만 비표준 설정으로) 오랫동안 거래해 왔습니다. 1켤레당 월 1000포인트에서 나옵니다. 모든 것을 모니터링하는 것은 불가능하기 때문에 전문가에게 문의하기로 결정했습니다. 최대 5포인트까지 손실이 거의 없습니다. 여기서 1쌍에 대해 1개의 거래만 있기 때문에 여기에서 볼륨을 가지고 놀고 여러 쌍에 베팅할 수 있습니다.

  타임프레임 H4

1.MA4/단순\닫기

2.MA5/단순\열기

작동 원리는 이렇습니다..
이익을 얻거나 손실을 중지하지 마십시오 . 교차로에서만 거래를 열고 닫습니다. 예를 들어 아래쪽에서 위쪽으로 교차하고 위쪽으로 주문을 열고 다시 교차할 때만 주문을 닫습니다. 역 신호를 받으면 거래를 성사시키기 위해 구매하면 마을이 열립니다. 일반적으로 이해 바랍니다) 전략에서 중요한 것은 이익조차도 아니라이 빌어 먹을 교차로) 이런 것) 나는이 전략을 오랫동안 거래 해 왔으며 이익은 좋지만 이 전략에 대한 고문을 작성하는 것은 어렵지 않을 것입니다.

도움이 되셨다면 여기 내 메일이 있습니다: 4iterRrock@mail.ru

아래는 제가 거의 1년 동안 거래한 템플릿입니다.

파일:
MAxi2r.tpl  2 kb