Прошу помощи в написании советника - страница 2

 
borilunad:

Как ему объяснить, чтобы поменял код на вставленный с SRC?!

Проще самому вставить.

int start()
{
     if (CountTrades() == 0)
     {
     TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
     SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
     OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, SL, TP, NULL, Magic, 0, CLR_NONE);
     {
     for (int i = OrdersHistoryTotal()-1; i>=0; i--)
        {
          if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
            {
             if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                if ( OrderType()==OP_BUY)
                  {
                   if (StringFind(OrderComment(),"sl")>=0)
                     {
                       lastlot = FindLastLots(OP_BUY);
                       lastlot = NormalizeDouble(lastlot * Multiplier, 2);
                       TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
                       SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
                       OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, SL, TP, NULL, Magic, 0, CLR_NONE);
           }
        }
      if(OrderType()==OP_SELL)
        {
         if(StringFind(OrderComment(),"sl")>=0)
           {
             lastlot = FindLastLots(OP_SELL);
             lastlot = NormalizeDouble(lastlot * Multiplier, 2);
             TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
             SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
             OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, SL, TP, NULL, Magic, 0, CLR_NONE);
             {
              if (StringFind(OrderComment(),"tp")>=0)
              {
                   TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
                   SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
                    OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, SL, TP, NULL, Magic, 0, CLR_NONE);
              }
             }
           }
        }
     }
  }
}
}
}                 
   return(0);
}
//+------------------------------------------------------------------+
int CountTrades()
{
    int count = 0;
    for (int i=OrdersTotal()-1; i>=0; i--)
    {
        if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
        {
           if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              count++;
        } 
    }
    
    return(count);
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
   double oldlots;
   int    oldticket;
   
   ticket = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)  
         {
             oldticket = OrderTicket();
             if(oldticket > ticket)
             {
                oldlots = OrderLots();
                ticket = oldticket;
             }
         }
      }
   }
   return(oldlots); 
}
 
 
granit77:

Проще самому вставить.

 


Я так иногда и делал, но ведь не могу за него удалить ненужную портянку, простыню, ну как ещё назвать это помягче!

Никто не хочет ознакомиться с "Навигатор по форуму и ответы на часто задаваемые вопросы. Настоятельно Рекомендуется к Прочтению! " Faq'a! :((
 
Не переживай. Это неистребимая тенденция, о которой знают все преподаватели. 95% стремятся задать вопрос, не дочитав документацию. 
Такова человеческая природа, и с этим ничего не поделаешь.
 
evillive:

откроет сразу ещё по условию if (CountTrades() == 0)
Вопрос был в другом. Ты не прочёл весь диалог об этом, потому и реплика в никуда.
 
granit77:
Не переживай. Это неистребимая тенденция, о которой знают все преподаватели. 95% стремятся задать вопрос, не дочитав документацию. 
Такова человеческая природа, и с этим ничего не поделаешь.


Да я не переживаю, сам был и преподавателем!

Ещё Инет облегчает поиск по всевозможным вопросам! Тут в поиске не нахожу, а в Гугле сразу находится несколько ответов с нашего же сайта! 

 
AlexeyVik:
Вопрос был в другом. Ты не прочёл весь диалог об этом, потому и реплика в никуда.

прочёл, прочёл )))


ответ тот же будет, откроет другой Бай на след. тике, так в коде прописано.

 
evillive:

прочёл, прочёл )))


ответ тот же будет, откроет другой Бай на след. тике, так в коде прописано.

Повторяю: Вопрос был в другом.

Конкретно:

В случае закрытия по тейку ордера Sell предусмотрено программно поставить ещё один Sell

В случае закрытия по тейку ордера Buy не предусмотрено открывать ордер. Открытие произойдёт, но по другому условию. Не зависимо от того как и какой закрылся предыдущий. Главное что if (CountTrades() == 0)

Хотя... расписывая для тебя и сам понял какой тут бардак. Получается, что сначала ставится Buy потом проверяется история и открываются ордера по другим условиям.

Видимо это и интересовало диму123...

 
AlexeyVik:

Повторяю: Вопрос был в другом.

Конкретно:

В случае закрытия по тейку ордера Sell предусмотрено программно поставить ещё один Sell

В случае закрытия по тейку ордера Buy не предусмотрено открывать ордер. Открытие произойдёт, но по другому условию. Не зависимо от того как и какой закрылся предыдущий. Главное что if (CountTrades() == 0)

Хотя... расписывая для тебя и сам понял какой тут бардак. Получается, что сначала ставится Buy потом проверяется история и открываются ордера по другим условиям.

Видимо это и интересовало диму123...



Конечно, откуда-то взял код, и теперь не знает, что делать! Изучать надо, а не халявить!
 
AlexeyVik:

Повторяю: Вопрос был в другом.

Конкретно:

В случае закрытия по тейку ордера Sell предусмотрено программно поставить ещё один Sell

В случае закрытия по тейку ордера Buy не предусмотрено открывать ордер. Открытие произойдёт, но по другому условию. Не зависимо от того как и какой закрылся предыдущий. Главное что if (CountTrades() == 0)

Хотя... расписывая для тебя и сам понял какой тут бардак. Получается, что сначала ставится Buy потом проверяется история и открываются ордера по другим условиям.

Видимо это и интересовало диму123...


вот-вот, по умолчанию ВСЕГДА будет сначала открыта длинная позиция, потому и нет отдельного кода для закрытого в прибыль бая, я это и сказал раньше. А селл с начальным лотом откроется только если предыдущий селл закрылся в прибыль.

хотя лично я бы открывал позиции по след. алгоритму:

1. если был Бай закрытый в убыток - открыть Селл с увеличенным лотом, если Бай закрылся в прибыль - открыть Бай с начальным лотом

2. наоборот для Селл.

3. начальный Бай перенести в конец кода, после вышеописанных условий, так начальная покупка будет только если в истории торгов пока пусто, а в остальных случаях позиции будут открыты в зависимости от предыдущих профитов или убытков.


и вобще-то в кодобазе уже есть такие советники, взять хотя бы этот.

 
evillive:

вот-вот, по умолчанию ВСЕГДА будет сначала открыта длинная позиция, потому и нет отдельного кода для закрытого в прибыль бая, я это и сказал раньше. А селл с начальным лотом откроется только если предыдущий селл закрылся в прибыль.

хотя лично я бы открывал позиции по след. алгоритму:

1. если был Бай закрытый в убыток - открыть Селл с увеличенным лотом, если Бай закрылся в прибыль - открыть Бай с начальным лотом

2. наоборот для Селл.

3. начальный Бай перенести в конец кода, после вышеописанных условий, так начальная покупка будет только если в истории торгов пока пусто, а в остальных случаях позиции будут открыты в зависимости от предыдущих профитов или убытков.


и вобще-то в кодобазе уже есть такие советники, взять хотя бы этот.



Не советник, а убийца!
Причина обращения: