приключения новичка - страница 11

 
niko:
Спасибо CB, я должен был это заметить, так что ошибка была в самом конце (130).

Работает ли он?


CB

 

Привет, CB, Он запускает сделки, но я не делал детального просмотра сделок, чтобы увидеть, правильно ли соблюдается логика (на первый взгляд кажется, что да). Так что это время, когда я говорю огромное "СПАСИБО ВАМ!!!!" :-)

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

 
CB, это напомнило мне кое о чем. Как я могу внести поправку в ваш код, чтобы позволить 2 или максимум 3 сделки быть открытыми в одном направлении (это как версия 2 вашего кода). Мы использовали OP_BUY/OP_SELL для старого кода, поэтому нам нужно будет изменить несколько вещей. Если вы скажете мне в "скелетной" форме, что нужно сделать (например: построить функцию, чтобы сделать это...), то я могу попробовать закодировать это и вернуть вам на рассмотрение. Этот способ лучше, чем если бы вы сами написали код, так как я буду следовать вашей логике и изучать части кодирования. Что скажете? (Я вижу, что у нас есть внешняя переменная, в которой мы задаем, сколько сделок в одном направлении нам разрешено, затем мы делаем функцию для расчета покупок, другую для расчета продаж, затем мы вызываем эти две функции в start() и проверяем внешнюю переменную там же... что-то вроде этого?
 

Это будет просто.

Задайте себе параметр, который является максимальным количеством открытых ордеров. Расширьте его, если вам нужно часто менять.

Затем реализуйте, изменив только функцию fnOrderDuplicate() - вам не придется менять функцию start(). Это поможет сохранить существующую архитектуру приложения.


CB

 
Я бы хотел, чтобы однажды я смог сказать "это будет легко!". Хорошо, я сделаю это, и посмотрим, что получится! Спасибо!
 

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


bool fnOrderDuplicate()
 {
  iDuplicateOrders = 0;                                  //setting orderdup to zero
  iOrders = OrdersTotal()-1;                             //iOrders returns market orders count - 1. So if zero orders, we get -1
  for (int i= iOrders; i>=0; i--)                         // the loop to cycle through total orders
   {
    OrderSelect( i, SELECT_BY_POS, MODE_TRADES);            //select order for function
    if ((OrderType() != OP_BUY) && (OrderType() != OP_SELL))      //if order is NOT op-buy and is NOT op-sell, sCurrentOrderType = other (ie no order)
     sCurrentOrderType = "OTHER";
    if (OrderType() == OP_BUY)                           //if order=buy, sCurrent OrderType = buy
     sCurrentOrderType = "BUY";                          //***7Jul09 ';' was missing at end of line
    if (OrderType() == OP_SELL)                          //***7Jul09: the end ')' was missing.
     sCurrentOrderType = "SELL";                         //if orderfound = sell, sCurrentOrder= sell
    if ((OrderSymbol() == Symbol()) && ( sCurrentOrderType == sSignal))  //if ordersymbolfortheorder= symbolforchart && ScurrentOrder = sSignal(fn_entryrules) 
        iDuplicateOrders++;                              //iDuplicateOrders is added 1
   }
  if ( iDuplicateOrders == 0)                             //if iduporders = 0 then fnOrderDuplicate = false, otherwise it's true.
   return(false);
  return(true);
 }
 
Эй, CB, есть ли помощь по вышеуказанному вопросу, как исправить код, чтобы сделать несколько сделок в одном направлении?
 
niko:
Привет, CB, есть помощь по вышеуказанному вопросу, как исправить код, чтобы сделать несколько сделок в одном направлении?

Просто измените: if (iDuplicateOrders == 0) на: if (iDuplicateOrders<= iMaxDuplicateOrders)

CB

 

Привет CB, спасибо за это. С этой опцией я не могу регулировать, сколько открытых ордеров разрешено в одном направлении (допустим, я делаю extern iMaxDuplicateOrders = 4;) ea будет запускать 4 шорта, а не распределять параметр равномерно (например: 2 шорта макс, 2 лонга макс). Может мне попробовать сделать дубликат bool fnOrderDuplicate (например: bool fnOrderDuplicateBuys, и bool fnOrderDuplicateSells) и затем ссылаться на каждый из них соответственно в bool fnShouldWeTrade. На мой взгляд, это может сработать, а как вы считаете?

 
niko:

Привет CB, спасибо за это. С этой опцией я не могу регулировать, сколько открытых ордеров разрешено в одном направлении (допустим, я делаю extern iMaxDuplicateOrders = 4;) ea будет запускать 4 шорта, а не распределять параметр равномерно (например: 2 шорта макс, 2 лонга макс). Может мне попробовать сделать дубликат bool fnOrderDuplicate (например: bool fnOrderDuplicateBuys, и bool fnOrderDuplicateSells) и затем ссылаться на каждый из них соответственно в bool fnShouldWeTrade. На мой взгляд, это может сработать, а как вы считаете?


Установка iMaxDuplicateOrders = 4 будет означать, что максимум будет 4 ордера в каждом направлении, так как мы проверяем направление перед увеличением счетчика.


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


Из примечаний ясно, что вы просто переписываете код в прозе, не понимая логики.


CB