Помните нас в школе учили: "примем число яблок в корзине за X, а число груш за Y (!)".
Не помню чтобы и те и другие были X. :))) Понимаете о чем я?
//+------------------------------------------------------------------+ //| AveragePrice.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" double lot, price; double avgprice; string name = "AveragePrice "; //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- ObjectsDeleteAll(); for (int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol() == Symbol() { if(OrderType() == OP_BUY) { lot += OrderLots(); price += OrderOpenPrice() * OrderLots(); avgpriceBUY = price / lot; } if (OrderType() == OP_SELL) { lot += OrderLots(); price += OrderOpenPrice() * OrderLots(); avgpriceSELL = price / lot; } } } } CreatObject(avgpriceBUY); CreatObject(avgpriceSELL); //---- return(0); } //+------------------------------------------------------------------+ void CreatObject(double price) { name = name + DoubleToStr(price,Digits); ObjectCreate(name,OBJ_HLINE,0,0,price); ObjectSet(name,OBJPROP_STYLE,STYLE_DOT); } //+------------------------------------------------------------------+
это да, но как то хотелось в одну функцию все засунуть, поэтому и ломал голову.
Ну это можно конечно, но зачем? код и так короткий, действие будет проводиться в любом случае, что экономим? Лишнюю строчку?
Ну это можно конечно, но зачем? код и так короткий, действие будет проводиться в любом случае, что экономим? Лишнюю строчку?
в таком случае, вот так будет правильней (поменял и price и lot для Buy и Sell):
//+------------------------------------------------------------------+ //| AveragePrice.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" double lotBuy, lotSell, priceBuy, priceSell; double avgpriceBuy, avgpriceSell; //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- ObjectsDeleteAll(); for (int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderType() == OP_BUY) { lotBuy += OrderLots(); priceBuy += OrderOpenPrice() * OrderLots(); avgpriceBuy = priceBuy / lotBuy; } if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) { lotSell += OrderLots(); priceSell += OrderOpenPrice() * OrderLots(); avgpriceSell = priceSell / lotSell; } } } CreatObject(avgpriceBuy); CreatObject(avgpriceSell); //---- return(0); } //+------------------------------------------------------------------+ void CreatObject(double price) { string name = "AveragePrice "; name = name + DoubleToStr(price,Digits); ObjectCreate(name,OBJ_HLINE,0,0,price); ObjectSet(name,OBJPROP_STYLE,STYLE_DOT); } //+------------------------------------------------------------------+
в таком случае, вот так будет правильней (поменял и price и lot для Buy и Sell):
Согласен. Так даже не "правильней", а "правильно". :)) Либо так, либо обнулять их надо.
Только вот это вот обратно менять не стоило. Или не заметили?
if (OrderSymbol() == Symbol() { if(OrderType() == OP_BUY) {
Ну если цель в том чтобы код был как можно короче (визуально тоже) то можно вот так. Я думаю вы именно это хотели.
... неверный код... удален... :)
к сожалению не правильное решение, такой вариант у меня тоже был.
дело в том, что к функции обращаемся из цикла, и значения lot и price при каждой итерации обнуляются.
если убрать обнуление, тогда при прогоне по Buy, и в случае если есть Sell, то Buy позиции прибавляются к Sell`овым.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здрасте всем. Написал скрипт который показывает среднюю цену по открытым позициям данного инструмента.
При тестировании нашел недоработку, мой скрипт считает или Buy или Sell ордера, но я не могу понять, как
объяснить ему что для Buy ордеров нужно рассчитать одну цену, для Sell ордеров, другую. Буду признателен за помощь.