Нужен простой советник по предыдущему бару

 
О умы! Я не силен в MQL5. Мне нужна Ваша помощь. Нужен советник, открывающий один ордер в противоположную сторону от предыдущей свечи. Если свеча была "Медведем", то открываем на покупку. Открывается ТОЛЬКО одна сделка с TP и SL (задаем в настройках). Так же необходима реализация маниманагмента: процент от депо (так же задаем в настройках). Лот должен зависит от кэша в кошельке. Спасибо!! Надеюсь: понятно объяснил. Я в программировании вообще не бум-бум(((( Цель: не столько заработать, сколько обучение. Ясен пень, что стратегия провальная)
 
Что мешает поискать в https://www.mql5.com/ru/code ?
 
Rad89:
О умы! Я не силен в MQL5. Мне нужна Ваша помощь. Нужен советник, открывающий один ордер в противоположную сторону от предыдущей свечи. Если свеча была "Медведем", то открываем на покупку. Открывается ТОЛЬКО одна сделка с TP и SL (задаем в настройках). Так же необходима реализация маниманагмента: процент от депо (так же задаем в настройках). Лот должен зависит от кэша в кошельке. Спасибо!! Надеюсь: понятно объяснил. Я в программировании вообще не бум-бум(((( Цель: не столько заработать, сколько обучение. Ясен пень, что стратегия провальная)

Тяжело тебе будет. Начинай потихоньку учить, хотя бы разбираться в чужом коде.

 
Короче: пролистал я  КодБэйс. Нет подобного советника((. Нужен прям до простецкого простой. Таких нет( Я ни где не могу найти гайд или сову, где можно было бы разобрать пример кода, отслеживающий уровни открытия и закрытия предыдущего бара и открывающий позицию на основании этих значений. Гайды в основном разжовывают работу с индикаторами. Может я не так ищу?((
 
Вот нашел кодик. Но как в него внедрить функцию анализа предыдущей свечи и выставить ордер в противоположную от неё сторону, не разобрался пока(
//+------------------------------------------------------------------+
//|                                                    e-TurboFx.mq5 |
//|                                          Copyright 2012, Integer |
//|                          https://login.mql5.com/ru/users/Integer |
//+------------------------------------------------------------------+
#property copyright "Integer"
#property link "https://login.mql5.com/ru/users/Integer"
#property description ""
#property version   "1.00"

#property description "Эксперт переписан с MQ4, автор RickD (http://www.mql4.com/ru/users/RickD), ссылка на оригинал - http://codebase.mql4.com/ru/1305"

#include <Trade/Trade.mqh>
#include <Trade/SymbolInfo.mqh>
#include <Trade/DealInfo.mqh>
#include <Trade/PositionInfo.mqh>

CTrade Trade;
CDealInfo Deal;
CSymbolInfo Sym;
CPositionInfo Pos;

//--- input parameters

input int      N                 =  3;          /*N*/                // Количество баров одного направления с увеличивающимся размером тела
input double   Lots              =  0.1;        /*Lots*/             // Лот, при значении 0 действует MaximumRisk.
input int      StopLoss          =  700;        /*StopLoss*/         // Стоплосс в пунктах, 0 - без стоплосс.
input int      TakeProfit        =  1200;       /*TakeProfit*/       // Тейкпрофит в пунктах, 0 - без тейкпрофит.

int Handle=INVALID_HANDLE;

datetime ctm[1];
datetime LastTime;
double lot,slv,msl,tpv,mtp;

MqlRates R[];
int up_1,dn_1,up_2,dn_2;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(){

   ArrayResize(R,N);
   
   if(!Sym.Name(_Symbol)){
      Alert("Ошибка инициализации CSymbolInfo, поворите попытку");    
      return(-1);
   }

   Print("Инициализация эксперта выполнена");
   
   return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   if(Handle!=INVALID_HANDLE)IndicatorRelease(Handle);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick(){

   if(CopyTime(_Symbol,PERIOD_CURRENT,0,1,ctm)==-1){
      return;
   }
   
   if(ctm[0]!=LastTime){
      
      // Индикаторы
      if(!Indicators()){
         return;
      }   
      
      // Сигналы
      bool CloseBuy=SignalCloseBuy();
      bool CloseSell=SignalCloseSell();
      bool OpenBuy=SignalOpenBuy();
      bool OpenSell=SignalOpenSell();

      // Закрытие
      if(Pos.Select(_Symbol)){
         if(CloseBuy && Pos.PositionType()==POSITION_TYPE_BUY){
            if(!Sym.RefreshRates()){
               return;  
            }
            if(!Trade.PositionClose(_Symbol,Sym.Spread()*3)){
               return;
            }
         }
         if(CloseSell && Pos.PositionType()==POSITION_TYPE_SELL){
            if(!Sym.RefreshRates()){
               return;  
            }         
            if(!Trade.PositionClose(_Symbol,Sym.Spread()*3)){
               return;
            }
         }         
      }
      
      // Открытие
      if(!Pos.Select(_Symbol)){
            if(OpenBuy && !OpenSell && !CloseBuy){ 
               if(!Sym.RefreshRates())return;         
               if(!SolveLots(lot))return;
               slv=SolveBuySL(StopLoss);
               tpv=SolveBuyTP(TakeProfit);
                  if(CheckBuySL(slv) && CheckBuyTP(tpv)){
                     Trade.SetDeviationInPoints(Sym.Spread()*3);
                     if(!Trade.Buy(lot,_Symbol,0,slv,tpv,"")){
                        return;
                     }
                  }
                  else{
                     Print("Позиция Buy не открывается, близкий стоплосс или тейкпрофит");
                  }         
            }
            // Продажа
            if(OpenSell && !OpenBuy && !CloseSell){
               if(!Sym.RefreshRates())return;         
               if(!SolveLots(lot))return;
               slv=SolveSellSL(StopLoss);
               tpv=SolveSellTP(TakeProfit);
                  if(CheckSellSL(slv) && CheckSellTP(tpv)){
                     Trade.SetDeviationInPoints(Sym.Spread()*3);
                     if(!Trade.Sell(lot,_Symbol,0,slv,tpv,"")){
                        return;
                     }
                  }
                  else{
                     Print("Позиция Sell не открывается, близкий стоплосс или тейкпрофит");
                  }          
            }
      }            
      LastTime=ctm[0];
   }
   
}

//+------------------------------------------------------------------+
//|   Функция копирования данных индикаторов, цены                   |
//+------------------------------------------------------------------+
bool Indicators(){
   if(
      CopyRates(_Symbol,PERIOD_CURRENT,1,N,R)==-1
   ){
      return(false);
   }      
 
   up_1=0;
   dn_1=0; 
   
   for(int i=0;i<N;i++){
      if(R[i].close<R[i].open)up_1++;
      if(R[i].close>R[i].open)dn_1++;
   }
   
   up_2=0;
   dn_2=0;    
   
   for(int i=1;i<N;i++){    
      if(MathAbs(R[i].close-R[i].open)>MathAbs(R[i-1].close-R[i-1].open)){
         up_2++;
         dn_2++;
      }
   }   
   
   return(true);
}

//+------------------------------------------------------------------+
//|   Функция определения сигналов покупки                           |
//+------------------------------------------------------------------+
bool SignalOpenBuy(){
   return(up_1==N && up_2==N-1);
}

//+------------------------------------------------------------------+
//|   Функция определения сигналов продажи                           |
//+------------------------------------------------------------------+
bool SignalOpenSell(){
   return(dn_1==N && dn_2==N-1);
}

//+------------------------------------------------------------------+
//|   Функция определения сигналов закрытия покупки                  |
//+------------------------------------------------------------------+
bool SignalCloseBuy(){

   return (false);
}

//+------------------------------------------------------------------+
//|   Функция определения сигналов закрытия продажи                  |
//+------------------------------------------------------------------+
bool SignalCloseSell(){

   return (false);
}

//+------------------------------------------------------------------+
//|   Функция вычисления стоплосса buy                               |
//+------------------------------------------------------------------+
double SolveBuySL(int StopLossPoints){
   if(StopLossPoints==0)return(0);
   return(Sym.NormalizePrice(Sym.Ask()-Sym.Point()*StopLossPoints));
}

//+------------------------------------------------------------------+
//|   Функция вычисления тейкпрофита buy                             |
//+------------------------------------------------------------------+
double SolveBuyTP(int TakeProfitPoints){
   if(TakeProfitPoints==0)return(0);
   return(Sym.NormalizePrice(Sym.Ask()+Sym.Point()*TakeProfitPoints));   
}

//+------------------------------------------------------------------+
//|   Функция вычисления стоплосса sell                               |
//+------------------------------------------------------------------+
double SolveSellSL(int StopLossPoints){
   if(StopLossPoints==0)return(0);
   return(Sym.NormalizePrice(Sym.Bid()+Sym.Point()*StopLossPoints));
}

//+------------------------------------------------------------------+
//|   Функция вычисления тейкпрофита sell                             |
//+------------------------------------------------------------------+
double SolveSellTP(int TakeProfitPoints){
   if(TakeProfitPoints==0)return(0);
   return(Sym.NormalizePrice(Sym.Bid()-Sym.Point()*TakeProfitPoints));   
}

//+------------------------------------------------------------------+
//|   Функция вычисления минимального стоплосса buy                  |
//+------------------------------------------------------------------+
double BuyMSL(){
   return(Sym.NormalizePrice(Sym.Bid()-Sym.Point()*Sym.StopsLevel()));
}

//+------------------------------------------------------------------+
//|   Функция вычисления минимального тейкпрофита buy                |
//+------------------------------------------------------------------+
double BuyMTP(){
   return(Sym.NormalizePrice(Sym.Ask()+Sym.Point()*Sym.StopsLevel()));
}

//+------------------------------------------------------------------+
//|   Функция вычисления минимального стоплосса sell                 |
//+------------------------------------------------------------------+
double SellMSL(){
   return(Sym.NormalizePrice(Sym.Ask()+Sym.Point()*Sym.StopsLevel()));
}

//+------------------------------------------------------------------+
//|   Функция вычисления минимального тейкпрофита sell               |
//+------------------------------------------------------------------+
double SellMTP(){
   return(Sym.NormalizePrice(Sym.Bid()-Sym.Point()*Sym.StopsLevel()));
}

//+------------------------------------------------------------------+
//|   Функция проверки стоплосса buy                                 |
//+------------------------------------------------------------------+
bool CheckBuySL(double StopLossPrice){
   if(StopLossPrice==0)return(true);
   return(StopLossPrice<BuyMSL());
}

//+------------------------------------------------------------------+
//|   Функция проверки тейкпрофита buy                               |
//+------------------------------------------------------------------+
bool CheckBuyTP(double TakeProfitPrice){
   if(TakeProfitPrice==0)return(true);
   return(TakeProfitPrice>BuyMTP());
}

//+------------------------------------------------------------------+
//|   Функция проверки стоплосса sell                                 |
//+------------------------------------------------------------------+
bool CheckSellSL(double StopLossPrice){
   if(StopLossPrice==0)return(true);
   return(StopLossPrice>SellMSL());
}

//+------------------------------------------------------------------+
//|   Функция проверки тейкпрофита sell                              |
//+------------------------------------------------------------------+
bool CheckSellTP(double TakeProfitPrice){
   if(TakeProfitPrice==0)return(true);
   return(TakeProfitPrice<SellMTP());
}


//+------------------------------------------------------------------+
//|   Функция определения лота по результатам торговли               |
//+------------------------------------------------------------------+
bool SolveLots(double & aLots){
   aLots=Lots;         
   return(true);
}
 
Все мозги поломал себе(( умом понимаю, что код простой должен быть. на банальное сравнение Если Open>Close, то покупаем. Наоборот - продаем. НО КАК ЭТО В КОДЕ СДЕЛАТЬ уже голова пухнет(
 
Rad89:
О умы! Я не силен в MQL5. Мне нужна Ваша помощь. Нужен советник, открывающий один ордер в противоположную сторону от предыдущей свечи. Если свеча была "Медведем", то открываем на покупку. Открывается ТОЛЬКО одна сделка с TP и SL (задаем в настройках). Так же необходима реализация маниманагмента: процент от депо (так же задаем в настройках). Лот должен зависит от кэша в кошельке. Спасибо!! Надеюсь: понятно объяснил. Я в программировании вообще не бум-бум(((( Цель: не столько заработать, сколько обучение. Ясен пень, что стратегия провальная)

этот должен подойти. была такая же идея, вот заказывал еще в 2017

Файлы:
z170720_v02.mq4  25 kb
Причина обращения: