MMA_Breakout_strategy_volume I (без MM или MF) - закодировано WhooDoo22 - страница 2

 
Опять же, существует множество способов выбора ордеров, например, я могу использовать булево значение для проверки того, открыт или закрыт ордер. Пример: Ордер отправлен, пять булевых функций установлены в true. Когда скользящие средние начнут пересекаться, булевы переменные будут установлены в false. Если определенные булевы переменные истинны и определенные скользящие средние пересекаются, то определенные булевы переменные объявляются ложными и определенный лот ордера закрывается. Есть и другие способы, но я не задумывался над этим. Я просто хочу предоставить вам решение. Надеюсь, оно было удовлетворительным. Я полагаю, что нашел бы более простой способ сделать это, но, опять же, я не задумывался над этим. Это все еще важно, но не так сложно закодировать, как MF или MM в этой стратегии. Спасибо.
 
Если у меня есть реальный счет, с которым я торговал раньше, и на нем нет открытых ордеров... если я запущу ваш советник на нем на EURUSD M30, что произойдет? Будет ли он совершать сделки?
 

Кстати, я запустил ваш советник в тестере стратегий и в итоге получил 11 ГБ лог-файл с ошибками... например...

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: OrderModify error 1

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: close #6 buy 0.01 EURUSD at 1.36028 sl: 1.31028 at price 1.35960

23:08:49 2007.05.06 22:01 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: unknown ticket 6 for OrderModify function

не могу изменить тикет #6, так как он только что был закрыт. . . . .
 
WhooDoo22:
Я считаю, что существует несколько способов выбора заказов, Все методы выбора заказов должны использовать функцию OrderSelect(). С учетом сказанного, я не понимаю, почему это может привести к сбою, поскольку советник четко выполняет функцию OrderClose() для всех ордеров без ошибок в тестере стратегий.

Ваш orderClose явно не работает. Если бы вы проверили свои коды возврата, вы бы это знали. Ваш orderSelect не работает, но вы не проверяете.

Если I не является номером билета, то ваш orderSelect не работает, как и все остальное.

если I - номер билета, то следующий номер билета НЕ i+1 (кроме как в тестере).

   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.04)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,25,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.03)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,50,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.02)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,100,0,MODE_SMMA,PRICE_CLOSE,1)))     {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
 

Саймон,

Если у меня есть Live-аккаунт...

RE: Я настоятельно не рекомендую вам запускать первый том на реальном балансе счета! Конечно, выбор за вами, но от вашего имени, я настоятельно не рекомендую вам запускать его на реальном счете, пока не завершится его эволюция от тома I к II. Том I все еще находится в стадии разработки, и его не следует запускать, пока он не будет полностью закодирован. Я не уверен, что произойдет, потому что сам не тестировал его на реальном счете. Я понимаю, что он не завершен, и решил удовлетворить его основные требования, прежде чем начинать тестирование на LIVE-счете.


Кстати...

RE: Я полагаю, что понимаю, что происходит в этой ошибке... Эта ошибка отражает ошибку в блоке кода "EMERGENCY SL". Я никогда не концентрировал свои силы на этом, поскольку он не так сложен в кодировании. Я закодировал его частично и не довел до конца. Блоку кода "EMERGENCY SL" не хватает важной адаптации. Я уверен, что если бы вы полностью удалили оба блока кода SELL и BUY "EMERGENCY SL", вы бы не получили 11-гигабайтный список ошибок. Причина, по которой он состоит из 11 гигов, заключается в том, что я считаю, что это одна и та же ошибка, повторяющаяся снова и снова на протяжении всей тестируемой истории.

Спасибо.


Уильям,

Я скажу, что у меня нет такого большого опыта обсуждения кода с вами, как у Саймона, но я хочу продолжить с вашим постом (спасибо за ваш пост! Он приветствуется).

Что вы хотите увидеть в I/II томе?

Я строго провожу тесты и добавляю необходимый код для тестирования, чтобы гарантировать его торговую ценность. Затем я доработаю то, что осталось от проблем с кодом, чтобы гарантировать безопасную торговлю на LIVE/DEMO.

Спасибо.

 
RaptorUK:
Если у меня есть реальный счет, на котором я торговал раньше, и на нем нет открытых ордеров... если я запущу ваш советник на нем на EURUSD M30, что произойдет? Будет ли он совершать сделки?

WhooDoo22:

Саймон,

Если у меня есть реальный счет...

RE: Я настоятельно не рекомендую вам запускать том I на балансе реального счета! Конечно, выбор за вами, но от вашего имени, я настоятельно не рекомендую вам запускать его на реальном счете, пока не завершится его эволюция от тома I к II. Том I все еще находится в стадии разработки, и его не следует запускать, пока он не будет полностью закодирован. Я не уверен, что произойдет, потому что сам не тестировал его на реальном счете. Я понимаю, что он не завершен, и решил удовлетворить основные требования, прежде чем начинать тестирование на LIVE-счете.


Я хотел сказать, что если есть история счета, то эти строки в вашем коде предотвратят любые сделки...

   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  
   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  


В других местах, где ордер размещается с помощью OrderSend(), есть существующий открытый ордер... ...так что если есть какие-либо старые ордера в истории, ваш советник не будет размещать никаких сделок никогда... ...если бы вы протестировали свой код на демо или в реальном времени, вы бы, вероятно, обнаружили это.

 

Саймон,

Точка зрения, которую я пытался...

RE: Понятно. Считаете ли вы возможным использовать функцию OrderSelect() для поиска уникальной переменной билета, тогда ниже будет лежать блок кода, содержащий "if (OrdersHistoryTotal()==0){". Не будет ли это работать ПОСЛЕ того, как функция OrderSelect() выберет уникальную переменную билета "ticket", а функция OrdersHistoryTotal() будет искать торговую историю только уникальной переменной билета из-за функции OrderSelect() выше. Оператор "if" ищет ордера в истории только для конкретной переменной, уникальной переменной билета.

//*************************
// BUY ORDER OPEN SECTION ;
//*************************

   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
   if(OrdersHistoryTotal()==0)                                                                 {
   if(OrdersTotal()<MaxOrders)                                                                 {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,2)<(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,2)))     { 
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)>(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,1)))     { 
     {
      ticket=OrderSend(Symbol(),OP_BUY,0.05,Ask,30,0,0,"",0,0,Blue);    
      i++;
     }
     }}}}

Спасибо.

 
WhooDoo22:

Саймон,

Точка зрения, которую я пытался...

RE: Понятно. Как вы считаете, можно ли использовать функцию OrderSelect() для поиска уникальной переменной тикета, ниже будет лежать блок кода, содержащий "if OrdersHistoryTotal()==0{". Не будет ли это работать ПОСЛЕ того, как функция OrdersHistoryTotal() будет искать предыдущие сделки только для уникальной переменной билета? Оператор "if" ищет ордера в истории только для конкретной переменной - переменной уникального билета.

Спасибо.

Я думаю, вы немного запутались... Вы сказали:"Это не будет работать ПОСЛЕ того, как функция OrdersHistoryTotal() будет искать предыдущие сделки только для уникальной переменной билета?" это неверно, проверьте документацию, функцияOrderHistoryTotal() делает следующее. ...

"Возвращает количество закрытых ордеров в истории счета, загруженной в терминал. Размер списка истории зависит от текущих настроек вкладки "История счета" терминала."


Это не имеет никакого отношения к номерам тикетов или переменным тикетов, или магическим числам, или чему-либо еще ... это возвращает общее количество сделок в пуле истории ... единственным ограничивающим фактором является то, что вы выбрали для отображения на вкладке "История счета". Вся история, последние 3 месяца, последний месяц или пользовательский период.
 
Еще один момент... если я использовал ваш советник и он заключил сделку... затем мне нужно выключить компьютер на пару минут, когда я снова запущу MT4 и ваш советник запустится, он никогда не найдет открытый ордер. . Все ваши вызовы OrderSelect() выбираются по тикету ... либо с помощью вашей переменной ticket , либо с помощью вашей переменнойi, ни одна из которых не имеет никакого способа хранения номера тикета моего открытого ордера.
 

Саймон,

Мне кажется, вы немного запутались...

RE: Том II должен начать процесс отправки ордера на основе условия. После отправки первого ордера (на основе условия) функция OrderClose() блокирует выполнение всех последующих сделок. Пожалуйста, попробуйте представить это как цикл. Запускаем шарик на основе условия, затем цикл запускается после закрытия первого ордера (ордера-шарика). Цикл продолжается, пересчитывая цифры и проверяя активные условия ДО тех пор, пока не будут выполнены будущие условия.

Спасибо

Причина обращения: