Перейти к содержанию

Доработка советников: общая тема


Рекомендуемые сообщения

Доработка советников: общая тема Опубликовано
1 час назад, Вера сказал:

по картинке не он,

 

FR Scalper PRO 6.0.zip

Ссылка на сообщение
Поделиться на другие сайты

  • 3 weeks later...
  • Ответов 2,4k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Версия с правками. Я немного свернул код, чтобы не перебирались ордера попусту и чтобы проверка красной/синей зоны делалась в одном месте. Прогнал в тесте с настройками по умолчанию. Ожидаемо лье

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

Система маятника, или попрыгунчика, или фиг ее знает как ее еще назвать не намного младше сетки мартингейла. Мы в далеком 2017 писали по ней сов с индикатором на вход: https://tlap.com/forum/labo

Перейти
Доработка советников: общая тема Опубликовано (изменено)

Всем привет. Помогите разобраться, почему советник работает не так, как планировалось. Спасибо.

Есть массив нолей и единиц. Ноль - продать. Единица - купить. Если сделка убыточная, тогда лот удваивается. Если прибыльная, то лот сбрасывается до минимального. У него эквити должна быть как у мартингейла, а в тестере всё совсем не так.

 


#include <Trade\Trade.mqh>

CTrade trade;

 

double LotSize = 0.01;
int TakeProfit = 500;
int StopLoss = 500;
double prices;

 

int LossCount = 0;
int lossCounter = 0;
int maxLossCounter = 0;

 

int SignalArray[10000];
int signalIndex = 0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   trade.SetExpertMagicNumber(123);
   trade.SetDeviationInPoints(10);
   trade.SetTypeFilling(ORDER_FILLING_FOK);


for(int i = 0; i < ArraySize(SignalArray); i++)
 {
 SignalArray[i] = i % 2;
 }

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   
   if(!PositionSelect(_Symbol))
     {

      double freeMargin = AccountInfoDouble(ACCOUNT_FREEMARGIN);
      if(LotSize * SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE) > freeMargin * 100)
        {
         PrintFormat("Размер лота превышает доступные средства.", LotSize, freeMargin);
         ExpertRemove();
        }
      

      if(SignalArray[signalIndex] == 0)
        {
         prices = SymbolInfoDouble(_Symbol, SYMBOL_BID);
         trade.Sell(LotSize, NULL, prices, prices + StopLoss * _Point, prices - TakeProfit * _Point);
        }
      if(SignalArray[signalIndex] == 1)
        {
         prices = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
         trade.Buy(LotSize, NULL, prices, prices - StopLoss * _Point, prices + TakeProfit * _Point);
        }
      signalIndex++;
      

      HistorySelect(0, TimeCurrent());
      ulong lastDeal = HistoryDealGetTicket(HistoryDealsTotal() - 1);
      double lastProfit = HistoryDealGetDouble(lastDeal, DEAL_PROFIT);
      
      if(lastProfit < 0)
        {
         lossCounter++;
         if(lossCounter > maxLossCounter)
           {
            maxLossCounter = lossCounter;
           }
         if(lossCounter >= LossCount)
           {
            LotSize *= 2;
           }
         }
         
      if(lastProfit > 0)
        {
         lossCounter = 0;
         LotSize = 0.01;
        }


     }
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   PrintFormat("Максимальное количество убыточных сделок подряд: ", maxLossCounter);
  }
//+------------------------------------------------------------------+
 

Изменено пользователем Aнaтолий
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
#include <Trade\Trade.mqh>

CTrade trade;

double LotSize = 0.01;
int TakeProfit = 500;
int StopLoss = 500;

int LossCount = 0;
int lossCounter = 0;
int maxLossCounter = 0;

int SignalArray[10000]= {0};
int signalIndex = 0;
ulong lastPos=0; // тикет последней позиции

//------------------------------------------------------------------
int OnInit()
{
  trade.SetExpertMagicNumber(123);
  trade.SetDeviationInPoints(10);
  trade.SetTypeFilling(ORDER_FILLING_FOK);

  for(int i = 0; i < ArraySize(SignalArray); i++) SignalArray[i] = i % 2;

  return(INIT_SUCCEEDED);
}
//------------------------------------------------------------------
void OnDeinit(const int reason)
{
  PrintFormat("Максимальное количество убыточных сделок подряд: ", maxLossCounter);
}
//------------------------------------------------------------------
void OnTick()
{
  if (PositionSelect(_Symbol)) return; // если позиция есть, то ждем

  // проверяем последнюю позицию
  if (lastPos>0) // если есть запомненная позиция, то берем её результат
  {
    if (!HistorySelectByPosition(lastPos)) return; // при ошибке выхоим
    double lastProfit=0;
    for (int i=0; i<HistoryDealsTotal(); ++i)
    {
      ulong d=HistoryDealGetTicket(i);
      if (HistoryDealGetInteger(d, DEAL_ENTRY)==DEAL_ENTRY_IN) continue;
      lastProfit+=HistoryDealGetDouble(d, DEAL_PROFIT);
    }
    lastPos=0; // сбросили чтоб повторно не проверять
    if (lastProfit >= 0)
    {
      lossCounter = 0;
      LotSize = 0.01;
    }
    else
    {
      lossCounter++;
      if (lossCounter > maxLossCounter) maxLossCounter = lossCounter;
      if (lossCounter >= LossCount) LotSize *= 2;
    }
  }

  // открываем новую позицию
  double freeMargin = AccountInfoDouble(ACCOUNT_FREEMARGIN);
  if (LotSize * SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE) > freeMargin * 100)
  {
    PrintFormat("Размер лота превышает доступные средства.", LotSize, freeMargin);
    ExpertRemove();
  }

  if (SignalArray[signalIndex] == POSITION_TYPE_SELL)
  {
    double prices = ND(SymbolInfoDouble(_Symbol, SYMBOL_BID));
    if (!trade.Sell(LotSize, NULL, prices, ND(prices + StopLoss * _Point), ND(prices - TakeProfit * _Point))) return; // при ошибке выход
  }
  else
  {
    double prices = ND(SymbolInfoDouble(_Symbol, SYMBOL_ASK));
    if (!trade.Buy(LotSize, NULL, prices, ND(prices - StopLoss * _Point), ND(prices + TakeProfit * _Point))) return; // при ошибке выход
  }
  lastPos=trade.ResultOrder();
  Print("тикет последней открытой позиции #"+string(lastPos));
  signalIndex++;
}
//------------------------------------------------------------------
double ND(double a, int n=-1)
{
  return NormalizeDouble(a, n<0?_Digits:n);
}
//------------------------------------------------------------------

 

  • Огонь! 1
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

Уважаемые разработчики, кто-нибудь может пожалуйста добавить сюда возможность установки лота при открытии ордеров в процентах от баланса, или эквити? Заранее спасибо.

b1.mq4

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано (изменено)

MODULE_v3.4ex.mq4

Здравствуйте уважаемые программисты! Могли бы вы немного изменить тот помощник? С функцией частичного и полного перекрытия Бывает непонятно работает тралл или нет. Могли бы добавить дополнительную информацию на график и чтобы обновлялись данные если закрою ордер, то проходил по тику перерасчёт перекрытия ордеров по траллу, или удалю линию она перерисовывалась 

Изменено пользователем Lexa000
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Помогите написать простейшего советника,открывающего бай при касании линии саппорт М1 и селл при касании резистенс. При каждом касании - новая сделка и неважно,сколько сделок уже в работе,сколько уже открытых селлов и Баев. Без Мартина и т.д.,закрывать буду другим совом. Не получается сюда индикатор скинуть.. в личку наверн

 

Ещё добавлю. Если цена выше  М1 резистенс,то сделка в селл открывается вы начале новой свечи. Если ниже - то ничего не происходит. Так же и с саппортом - если цена вначале новой свечи ниже,то открывается бай,если выше, то ничего не происходит

SupportResistance M1 (1).ex4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
//=========================================================================================================================================//
//          Функция модификации СЛ и ТП при перекрытии ордеров                                                                             //
//=========================================================================================================================================//

void TralOverlap()
  {
   

   switch(overlap)
     {
      case 1:
      case 2:
      case 3:
      case 4: {ColOver0=clrDeepSkyBlue; ColOver1=clrAqua; Typetral="Трал частичн. перекрытия!";} break;

      case 5:
      case 6:
      case 7:
      case 8:  {ColOver0=clrGold; ColOver1=clrYellow; Typetral="Трал основн. перекрытия!";} break;
      case 9:
      case 10:
      
      default: break;
     }
   switch(overlap)
     {
      case 10:
      case 8:
      case 6:
      case 4:
      case 2:
        {
         if(!flag)
           {
            PrOver=NormalizeDouble(Ask,Digits);
            flag=true;
            if(Info)
              {
               DrawLine("IOverTP",PrOver,ColOver0,1);
              }
           }
         else if(flag && !flag1 && Ask<PrOver-OverTralStart*Point)
           {
            flag1=true;
            if(Info)
              {
               DrawLine("IOverTP",PrOver,ColOver1,1);
              }
           }
         else if(flag1)
           {
            if(Ask<PrOver-(OverTralStart+OverTralSize)*Point)
              {
               PrOver=Ask+OverTralStart*Point;
               if(Info)
                 {
                  DrawLine("IOverTP",PrOver,ColOver1,1);
                 }
              }
            else if(Ask>=PrOver)
              {
               if(Info)
                 {
                  DeleteSelObj("IOverTP");
                  DeleteSelObj("ItxtOver");
                 }
               switch(overlap)
                 {
                  case 2:
                    {
                     int t=0;
                     if(Cprofit1!=0)
                       {
                        for(int i=0; i<ArraySize(Clot); i++)
                          {
                           double k=0.0;
                           k=Cprofit[i]/Cprofit1;
                           if(Cprofit[i]<0.0 && Clot[i]>k*Lprofit1*Clot[i]/-Cprofit[i])
                              Clot[i]=MathFloor(k*Lprofit1*Clot[i]/-Cprofit[i]/Step)*Step;
                           if(Clot[i]>=minLot)
                             {
                              if(CloseOrder(Cpos[i],-1,Clot[i])) t++;
                             }
                          }
                        if(t>0) {for(int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i]); flag=false;}
                       }
                    }
                  break;
                  case 4:
                    {
                      m=0;
                     if(Cprofit1!=0)
                       {
                        for( int i=0; i<ArraySize(Clot); i++)
                          {
                           double k=0.0;
                           k=Cprofit[i]/Cprofit1;
                           if(Cprofit[i]<0.0 && Clot[i]>k*Lprofit1*Clot[i]/-Cprofit[i])
                              Clot[i]=MathFloor(k*Lprofit1*Clot[i]/-Cprofit[i]/Step)*Step;
                           if(Clot[i]>=minLot)
                             {
                              if(CloseOrder(Cpos[i],OP_SELL,Clot[i])) m++;
                             }
                          }
                        if(m>0) {for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i],OP_SELL); flag=false;}
                       }
                    }
                  break;
                  case 6:
                    {
                     if(CloseOrder(Cpos[0]))
                       {
                        for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i]); flag=false;
                       }
                    }
                  break;
                  case 8:
                    {
                     if(CloseOrder(Cpos[0],OP_SELL,Clot[0]))
                       {
                        for(int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i],OP_SELL,Llot[i]); flag=false;
                       }
                    }
                  break;
                  
                 }
               if(!flag)
                 {
                  flag1  =false;
                  PrOver =0.0;
                  overlap=0;
                 }
              }
           }
        }
      break;
      case 9:
      case 7:
      case 5:
      case 3:
      case 1:
        {
         if(!flag)
           {
            PrOver=NormalizeDouble(Bid,Digits);
            flag=true;
            if(Info)
              {
               DrawLine("IOverTP",PrOver,ColOver0,1);
              }
           }// запоминаем уровень один раз
         else if(flag && !flag1 && Bid>PrOver+OverTralStart*Point)
           {
            flag1=true;
            if(Info)
              {
               DrawLine("IOverTP",PrOver,ColOver1,1);
              }
           }
         else if(flag1)
           {
            if(Bid>PrOver+(OverTralStart+OverTralSize)*Point)
              {
               PrOver=Bid-OverTralStart*Point;
               if(Info)
                 {
                  DrawLine("IOverTP",PrOver,ColOver1,1);
                 }
              }
            else if(Bid<=PrOver)
              {
               if(Info)
                 {
                  DeleteSelObj("IOverTP");
                  DeleteSelObj("ItxtOver");
                 }
               switch(overlap)
                 {
                  case 1:
                    {
                      int t=0;
                     if(Cprofit1!=0)
                       {
                        for( int i=0; i<ArraySize(Clot); i++)
                          {
                            double k=0.0;
                           k=Cprofit[i]/Cprofit1;
                           if(Cprofit[i]<0.0 && Clot[i]>k*Lprofit1*Clot[i]/-Cprofit[i])
                              Clot[i]=MathFloor(k*Lprofit1*Clot[i]/-Cprofit[i]/Step)*Step;
                           if(Clot[i]>=minLot)
                             {
                              if(CloseOrder(Cpos[i],-1,Clot[i])) t++;
                             }
                          }
                        if(t>0) {for(int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i]); flag=false;}
                       }
                    }
                  break;
                  case 3:
                    {
                       m=0;
                     if(Cprofit1!=0)
                       {
                        for( int i=0; i<ArraySize(Clot); i++)
                          {
                            double k=0.0;
                           k=Cprofit[i]/Cprofit1;
                           if(Cprofit[i]<0.0 && Clot[i]>k*Lprofit1*Clot[i]/-Cprofit[i])
                              Clot[i]=MathFloor(k*Lprofit1*Clot[i]/-Cprofit[i]/Step)*Step;
                           if(Clot[i]>=minLot)
                             {
                              if(CloseOrder(Cpos[i],OP_BUY,Clot[i])) m++;
                             }
                          }
                        if(m>0) {for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i],OP_BUY); flag=false;}
                       }
                    }
                  break;
                  case 5:
                    {
                     if(CloseOrder(Cpos[0]))
                       {
                        for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i]); flag=false;
                       }
                    }
                  break;
                  case 7:
                    {
                     if(CloseOrder(Cpos[0],OP_BUY,Clot[0]))
                       {
                        for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i],OP_BUY,Llot[i]); flag=false;
                       }
                    }
                  break;             
                 }
               if(!flag)
                 {
                  flag1  =false;
                  PrOver =0.0;
                  overlap=0;
                 }
              }
           }
        }
      break;
     }
  }

Эта часть кода все время зависает, как сделать чтобы она по тикету работала? {ColOver0=clrDeepSkyBlue; ColOver1=clrAqua; Typetral="Трал частичн. перекрытия!";} break; Удаляю эту часть на графике, она не восстанавливается, работает как невидимая

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 30.09.2023 в 09:38, Lexa000 сказал:
//=========================================================================================================================================//
//          Функция модификации СЛ и ТП при перекрытии ордеров                                                                             //
//=========================================================================================================================================//

void TralOverlap()
  {
   

   switch(overlap)
     {
      case 1:
      case 2:
      case 3:
      case 4: {ColOver0=clrDeepSkyBlue; ColOver1=clrAqua; Typetral="Трал частичн. перекрытия!";} break;

      case 5:
      case 6:
      case 7:
      case 8:  {ColOver0=clrGold; ColOver1=clrYellow; Typetral="Трал основн. перекрытия!";} break;
      case 9:
      case 10:
      
      default: break;
     }
   switch(overlap)
     {
      case 10:
      case 8:
      case 6:
      case 4:
      case 2:
        {
         if(!flag)
           {
            PrOver=NormalizeDouble(Ask,Digits);
            flag=true;
            if(Info)
              {
               DrawLine("IOverTP",PrOver,ColOver0,1);
              }
           }
         else if(flag && !flag1 && Ask<PrOver-OverTralStart*Point)
           {
            flag1=true;
            if(Info)
              {
               DrawLine("IOverTP",PrOver,ColOver1,1);
              }
           }
         else if(flag1)
           {
            if(Ask<PrOver-(OverTralStart+OverTralSize)*Point)
              {
               PrOver=Ask+OverTralStart*Point;
               if(Info)
                 {
                  DrawLine("IOverTP",PrOver,ColOver1,1);
                 }
              }
            else if(Ask>=PrOver)
              {
               if(Info)
                 {
                  DeleteSelObj("IOverTP");
                  DeleteSelObj("ItxtOver");
                 }
               switch(overlap)
                 {
                  case 2:
                    {
                     int t=0;
                     if(Cprofit1!=0)
                       {
                        for(int i=0; i<ArraySize(Clot); i++)
                          {
                           double k=0.0;
                           k=Cprofit[i]/Cprofit1;
                           if(Cprofit[i]<0.0 && Clot[i]>k*Lprofit1*Clot[i]/-Cprofit[i])
                              Clot[i]=MathFloor(k*Lprofit1*Clot[i]/-Cprofit[i]/Step)*Step;
                           if(Clot[i]>=minLot)
                             {
                              if(CloseOrder(Cpos[i],-1,Clot[i])) t++;
                             }
                          }
                        if(t>0) {for(int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i]); flag=false;}
                       }
                    }
                  break;
                  case 4:
                    {
                      m=0;
                     if(Cprofit1!=0)
                       {
                        for( int i=0; i<ArraySize(Clot); i++)
                          {
                           double k=0.0;
                           k=Cprofit[i]/Cprofit1;
                           if(Cprofit[i]<0.0 && Clot[i]>k*Lprofit1*Clot[i]/-Cprofit[i])
                              Clot[i]=MathFloor(k*Lprofit1*Clot[i]/-Cprofit[i]/Step)*Step;
                           if(Clot[i]>=minLot)
                             {
                              if(CloseOrder(Cpos[i],OP_SELL,Clot[i])) m++;
                             }
                          }
                        if(m>0) {for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i],OP_SELL); flag=false;}
                       }
                    }
                  break;
                  case 6:
                    {
                     if(CloseOrder(Cpos[0]))
                       {
                        for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i]); flag=false;
                       }
                    }
                  break;
                  case 8:
                    {
                     if(CloseOrder(Cpos[0],OP_SELL,Clot[0]))
                       {
                        for(int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i],OP_SELL,Llot[i]); flag=false;
                       }
                    }
                  break;
                  
                 }
               if(!flag)
                 {
                  flag1  =false;
                  PrOver =0.0;
                  overlap=0;
                 }
              }
           }
        }
      break;
      case 9:
      case 7:
      case 5:
      case 3:
      case 1:
        {
         if(!flag)
           {
            PrOver=NormalizeDouble(Bid,Digits);
            flag=true;
            if(Info)
              {
               DrawLine("IOverTP",PrOver,ColOver0,1);
              }
           }// запоминаем уровень один раз
         else if(flag && !flag1 && Bid>PrOver+OverTralStart*Point)
           {
            flag1=true;
            if(Info)
              {
               DrawLine("IOverTP",PrOver,ColOver1,1);
              }
           }
         else if(flag1)
           {
            if(Bid>PrOver+(OverTralStart+OverTralSize)*Point)
              {
               PrOver=Bid-OverTralStart*Point;
               if(Info)
                 {
                  DrawLine("IOverTP",PrOver,ColOver1,1);
                 }
              }
            else if(Bid<=PrOver)
              {
               if(Info)
                 {
                  DeleteSelObj("IOverTP");
                  DeleteSelObj("ItxtOver");
                 }
               switch(overlap)
                 {
                  case 1:
                    {
                      int t=0;
                     if(Cprofit1!=0)
                       {
                        for( int i=0; i<ArraySize(Clot); i++)
                          {
                            double k=0.0;
                           k=Cprofit[i]/Cprofit1;
                           if(Cprofit[i]<0.0 && Clot[i]>k*Lprofit1*Clot[i]/-Cprofit[i])
                              Clot[i]=MathFloor(k*Lprofit1*Clot[i]/-Cprofit[i]/Step)*Step;
                           if(Clot[i]>=minLot)
                             {
                              if(CloseOrder(Cpos[i],-1,Clot[i])) t++;
                             }
                          }
                        if(t>0) {for(int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i]); flag=false;}
                       }
                    }
                  break;
                  case 3:
                    {
                       m=0;
                     if(Cprofit1!=0)
                       {
                        for( int i=0; i<ArraySize(Clot); i++)
                          {
                            double k=0.0;
                           k=Cprofit[i]/Cprofit1;
                           if(Cprofit[i]<0.0 && Clot[i]>k*Lprofit1*Clot[i]/-Cprofit[i])
                              Clot[i]=MathFloor(k*Lprofit1*Clot[i]/-Cprofit[i]/Step)*Step;
                           if(Clot[i]>=minLot)
                             {
                              if(CloseOrder(Cpos[i],OP_BUY,Clot[i])) m++;
                             }
                          }
                        if(m>0) {for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i],OP_BUY); flag=false;}
                       }
                    }
                  break;
                  case 5:
                    {
                     if(CloseOrder(Cpos[0]))
                       {
                        for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i]); flag=false;
                       }
                    }
                  break;
                  case 7:
                    {
                     if(CloseOrder(Cpos[0],OP_BUY,Clot[0]))
                       {
                        for( int i=0; i<ArraySize(Llot); i++) CloseOrder(Lpos[i],OP_BUY,Llot[i]); flag=false;
                       }
                    }
                  break;             
                 }
               if(!flag)
                 {
                  flag1  =false;
                  PrOver =0.0;
                  overlap=0;
                 }
              }
           }
        }
      break;
     }
  }

Эта часть кода все время зависает, как сделать чтобы она по тикету работала? {ColOver0=clrDeepSkyBlue; ColOver1=clrAqua; Typetral="Трал частичн. перекрытия!";} break; Удаляю эту часть на графике, она не восстанавливается, работает как невидимая

Я добавил трал в тик, а тик в таймер, ситуация улучшилась,  DrawLine("IOverTP",PrOver,ColOver1,1); но вот с этой линией проблему не знаю как решить, не обновляется, зависает. Можете мне подсказать как это исправить?

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 08.09.2023 в 17:59, Rtr сказал:

Уважаемые разработчики, кто-нибудь может пожалуйста добавить сюда возможность установки лота при открытии ордеров в процентах от баланса, или эквити? Заранее спасибо.

b1.mq4 56.45 \u043a\u0411 · 5 загрузок

Я сделал так, если понравится, то пользуйся

b1.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 07.10.2023 в 09:31, Lexa000 сказал:

Я сделал так, если понравится, то пользуйся

b1.mq4 113.45 \u043a\u0411 · 2 загрузки

Выше не работал с множителем, исправил

b1.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

PipFiniteTrendPro + exp_iCustom кто нибудь работал с этим индикатором и совой. Может кто их спарить. Могу оплатить работу. 

 

 

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано
В 09.10.2023 в 12:50, Lexa000 сказал:

Выше не работал с множителем, исправил

b1.mq4 115.7 \u043a\u0411 · 4 загрузки

Большое спасибо за помощь! Потестировал... Пока не получилось сделать так, что бы он внимание обращал на эквити.

Подскажи пожалуйста: ты добавил risk. Какие там цифры нужны? 

Нужно, что бы при 10000 он выставлял лот 0.1, 10100 - 0.11, 10200 - 0.12.....

При 20000 должно быть 0.2 и так далее..

 

Сейчас при любых цифрах risk (пробовал 10, 50, 100 и 200) он все равно ставит лот 0.2 (такой же, как и прописан в min.lot ниже).

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 23.10.2023 в 14:06, Rtr сказал:

Большое спасибо за помощь! Потестировал... Пока не получилось сделать так, что бы он внимание обращал на эквити.

Подскажи пожалуйста: ты добавил risk. Какие там цифры нужны? 

Нужно, что бы при 10000 он выставлял лот 0.1, 10100 - 0.11, 10200 - 0.12.....

При 20000 должно быть 0.2 и так далее..

 

Сейчас при любых цифрах risk (пробовал 10, 50, 100 и 200) он все равно ставит лот 0.2 (такой же, как и прописан в min.lot ниже).

Это риск от суммы баланса, чтобы от суммы 10000 выставлял 0.1, нужно ставить 10.0

test.set

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Здравствуйте уважаемые программисты. Может кто-нибудь добавить в этот советник фильтр максимального спреда.

ground.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
4 часа назад, Gffdsa сказал:

Здравствуйте уважаемые программисты. Может кто-нибудь добавить в этот советник фильтр максимального спреда.

ground.mq4 13.47 \u043a\u0411 · 4 загрузки

сейчас по умолчанию максимальный спред 5, менять можно в настройках

ground.mq4

  • Лайк 2
  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Здравствуйте уважаемые программисты. В MQL не силён, возможно ли в данный советник прописать одно условие, если это не проблематично:

Сейчас советник просто отключает и включает кнопку "Автоторговля" в указанное время.

А нужно, чтобы советник отключал кнопку «Автоторговля» в указанное время, если только в рынке нет открытых позиций.

Т.е. в заданное время окончание торговли, если в терминале нет открытых ордеров, советник сразу отключает кнопку «Автоторговля». Если в терминале есть открытые ордера, то только после закрытия этих ордеров советник сразу отключает кнопку «Автоторговля».

TimeAutotrade.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
59 минут назад, Gffdsa сказал:

Здравствуйте уважаемые программисты. В MQL не силён, возможно ли в данный советник прописать одно условие, если это не проблематично:

Сейчас советник просто отключает и включает кнопку "Автоторговля" в указанное время.

А нужно, чтобы советник отключал кнопку «Автоторговля» в указанное время, если только в рынке нет открытых позиций.

Т.е. в заданное время окончание торговли, если в терминале нет открытых ордеров, советник сразу отключает кнопку «Автоторговля». Если в терминале есть открытые ордера, то только после закрытия этих ордеров советник сразу отключает кнопку «Автоторговля».

TimeAutotrade.mq4 5.76 \u043a\u0411 · 0 загрузок

Держите.

TimeAutotrade.mq4

Я добавил флажок IgnoreOpenOrders - если переключить в true, он будет работать, как раньше.

По умолчанию false - то есть поведение, которое вы хотели.

 

Для ясности: если в рынке любые позиции, или отложки на счете.

 

  • Лайк 2
  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

всем привет...есть умельцы дописать условия в советник?  ДОПИСАТЬ УСЛОВИЯ В СОВЕТНИКА. НУЖНО ЧТОБ БЫЛА ВОЗМОЖНОСТЬ ВЫСТАВЛЯТЬ РЕВЕРС СИГНАЛА НА ОПРЕДЕЛЕННОМ КОЛЕНЕ МАРТИНА В общем советник работать будет по мартингейлу. Нужно прописать чтоб в настройках был реверс на определенном колене. Например в настройках реверса укажем 3. Соответственно сов открывает 1, 2 колено как положено по сигналу, а 3 колено открывает реверсом не заканчивая серии мартина. Так же чтоб было возможным ставить не только 3 шаг в реверс а например 3,5,7.   и еще чтоб при открытии очередного колена закрывалось предыдущее дабы не тащить за собой хвосты... за ранее спасибо тем кто откликнется!!!

MA Profi.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Доброго времени, подскажите по какому принципу сова входит в рынок и как изменить ? Я не специалист, но по наблюдениям, по МА с периодом (4), если да - то можно сделать изменяющийся период ?

Fx_s.ex4 Fx_s (1)~.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Здравствуйте друзья, не могли вы посоветовать как качественно детально протестировать советника? Данный момент пишу советник по видеоматериалам, но дело в том что когда я тестирую свой советник в терминале брокера, несмотря на то что я скачал историю цен, советник как будто не видит тех цен что я вижу в терминале. Поэтому прощу вас помочь тестированием советника, поделится опытом где и как вы тестируете свои советники. Заранее извиняюсь если вопрос оказался банальным, я просто до сих пор думал что правильно тестирую свой советник, но на деле совсем другое.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано (изменено)

Уважаемые программисты, есть сова с открытым кодом, но в тестере не торгует, на график ставится нормально, но тоже не торгует, надо бы ее рихтануть, выкладываю с сетом на фунт М1

EA_Smart_Neural_V7_original.mq4 EA_Smart_Neural_V7.zip

Изменено пользователем segaj
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
12 минут назад, segaj сказал:

Уважаемые программисты, есть сова с открытым кодом, но в тестере не торгует, на график ставится нормально, но тоже не торгует, надо бы ее рихтануть, выкладываю с сетом на фунт М1

Привет, у меня с этим сетом в тестере не работает, но на дефолтных настройках работает без проблем, может быть дело в настройках 

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...