Taras Slobodyanik: не могу ничего сказать - вижу каждый раз разные куски кода) что там и как - нужно вызывать телепатов)
Пожалуйста посмотрите, код кажется огромным но это не так, сейчас при нажатии на клавишу Щ(O) меняется безубыток, прошу вас исправьте строчку в intOnInit():
#property copyright"Copyright 2018, 1AM2"#property link"http://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_windowexterndouble Profit=0.0; //Сумма стредств в валюте депозита, которую нужно получить после закрытия позицийexternint MagicNumber = 0; //Фильтр по идентификатору советниковexterncolor ColorBuy = DarkBlue;
externcolor ColorSell = FireBrick;
string NameBuy = "LineBuy";
string NameSell = "LineSell";
bool draw;
externstring Show_true="O"; // Описание объектов//сам индюкdouble ProfitPrice(string fSymbol, int fType, int fMagic=0, double MyProfit=0.0){
//Функция возвращает цену, на которую необходимо установить уровень TakeProfit, чтобы получить прибыль MyProfitdouble SummPrice=0.0, SummLots=0.0, Formula=0.0, SummLoss=0.0;
int k;
int total = OrdersTotal();
for (int i = total-1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==fSymbol) {
if(OrderMagicNumber()==fMagic || fMagic==0) {
if(OrderType()==fType) {
k++;
SummLots=SummLots+OrderLots();
SummPrice=SummPrice+OrderOpenPrice()*OrderLots();
SummLoss=SummLoss+OrderCommission()+OrderSwap();
}
}
}
}//Next i if(k>0){
if(fType==OP_BUY){
Formula = SummPrice/SummLots +
(MyProfit-SummLoss) * MarketInfo(fSymbol, MODE_POINT) /
(MarketInfo(fSymbol, MODE_TICKVALUE) * SummLots);
} else {
Formula = SummPrice/SummLots -
(MyProfit-SummLoss) * MarketInfo(fSymbol, MODE_POINT) /
(MarketInfo(fSymbol, MODE_TICKVALUE) * SummLots);
}
}
return(Formula);
}//ProfitPrice()//+------------------------------------------------------------------+void ProfitPrice2(string fSymbol, int fMagic=0, double MyProfit=0.0){
double BuyLots=0.0, SellLots=0.0, BuyProfit=0.0, SellProfit=0.0, BuyPrice=0.0, SellPrice=0.0;
int total = OrdersTotal();
for (int i = total-1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==fSymbol) {
if(OrderMagicNumber()==fMagic || fMagic==0) {
if(OrderType()==OP_BUY){
BuyLots = BuyLots + OrderLots();
BuyProfit = BuyProfit + OrderProfit() + OrderCommission() + OrderSwap();
}elseif(OrderType()==OP_SELL){
SellLots = SellLots + OrderLots();
SellProfit = SellProfit + OrderProfit() + OrderCommission() + OrderSwap();
}
}
}
}//Next i double TickValue = MarketInfo(fSymbol, MODE_TICKVALUE);
if ((BuyLots - SellLots) > 0) {
BuyPrice = Bid - ((BuyProfit + SellProfit - MyProfit) / (TickValue * (BuyLots - SellLots)) * Point);
}
if ((SellLots - BuyLots) > 0) {
SellPrice = Ask + ((BuyProfit + SellProfit - MyProfit) / (TickValue * (SellLots - BuyLots)) * Point);
}
if((BuyLots - SellLots) == 0.0){
if(BuyLots>0) BuyPrice = Bid - ((BuyProfit + SellProfit - MyProfit) / (TickValue * BuyLots) * Point); //уровень безубытка для всех BUY ордеровif(SellLots>0) SellPrice = Ask + ((SellProfit + BuyProfit - MyProfit) / (TickValue * SellLots) * Point); //уровень безубытка для всех SELL ордеров
}
SetPriceLine(BuyPrice, NameBuy, ColorBuy);
SetPriceLine(SellPrice, NameSell, ColorSell);
}//ProfitPrice2()//+------------------------------------------------------------------+void SetPriceLine(double Price=0.0, string NameLine = "MyLine", color ColorLine = DarkOliveGreen){
int indWnd=0;
//hWnd = WindowFind(window);if (ObjectFind(NameLine)==-1) ObjectCreate(NameLine, OBJ_HLINE, indWnd, 0, Price);
if(Price==0.0){
ObjectDelete(NameLine);
}else{
ObjectSet(NameLine, OBJPROP_PRICE1, Price);
ObjectSet(NameLine, OBJPROP_COLOR, ColorLine);
}
}//SetPriceLine()//+------------------------------------------------------------------+//сам индюк//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingif (ObjectFind(0,"NameSell")>=0)
draw=false;
else
draw=true;
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
if(reason != 3)
{
ObjectDelete("NameBuy");
ObjectDelete("NameSell");
}
}
//+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа long constdouble& dparam, // параметр события типа double conststring& sparam // параметр события типа string
)
{
//--- нажатие кнопки на клавиатуре if(id==CHARTEVENT_KEYDOWN)
{
//--- Уровень безубыткаif(lparam==(StringGetChar(Show_true,0)))
{
if(draw)
{
int counted_bars=IndicatorCounted();
double PB = ProfitPrice(Symbol(), OP_BUY, MagicNumber, Profit);
double PS = ProfitPrice(Symbol(), OP_SELL, MagicNumber, Profit);
SetPriceLine(PB, NameBuy, ColorBuy);
SetPriceLine(PS, NameSell, ColorSell);
draw=false;
}
else
{
ProfitPrice2(Symbol(), MagicNumber, Profit);
draw=true;
}
}
//--- Уровень безубытка
}
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
Так как две линии могут быть в обоих режимах, то для проверки нельзя использовать тоже самое имя.
вот, немного "распутал"
ОГРОМЕДНЕЙШЕЕ Спасибо))) всё прекрасно работает))) спасибо!!!!
Можно ли, вообще существует такая возможность, чтобы при нажатии 3-го раза полностью убирались линии? или посредством if и else такое нереально сделать?
конечно можно, переделать флаг с буула на инт, и везде добавить третье условие
могли бы вы еще добавить 3-е условие, или хотя бы кинуть любой пример где есть 3-е условие Я пытаюсь сам добавить но пишет мол if и else может быть только одно, мол 3-го else не может быть.
могли бы вы еще добавить 3-е условие, или хотя бы кинуть любой пример где есть 3-е условие Я пытаюсь сам добавить но пишет мол if и else может быть только одно, мол 3-го else не может быть.
могли бы вы еще добавить 3-е условие, или хотя бы кинуть любой пример где есть 3-е условие Я пытаюсь сам добавить но пишет мол if и else может быть только одно, мол 3-го else не может быть.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Taras Slobodyanik:
не могу ничего сказать - вижу каждый раз разные куски кода)
что там и как - нужно вызывать телепатов)
Пожалуйста посмотрите, код кажется огромным но это не так, сейчас при нажатии на клавишу Щ(O) меняется безубыток, прошу вас исправьте строчку в int OnInit():
Так как две линии могут быть в обоих режимах, то для проверки нельзя использовать тоже самое имя.
вот, немного "распутал"
Да, точно! Надо под одну кнопку засунуть бай и селл, чтобы не напрягаться передвигом пальца! Просто долбить по одной кнопке!
че уж там, сразу 3 кнопки: Бай, Селл, Закрыть все.
Так как две линии могут быть в обоих режимах, то для проверки нельзя использовать тоже самое имя.
вот, немного "распутал"
ОГРОМЕДНЕЙШЕЕ Спасибо))) всё прекрасно работает))) спасибо!!!!
Можно ли, вообще существует такая возможность, чтобы при нажатии 3-го раза полностью убирались линии?или посредством if и else такое нереально сделать?
Можно ли, вообще существует такая возможность, чтобы при нажатии 3-го раза полностью убирались линии?
или посредством if и else такое нереально сделать?конечно можно, переделать флаг с буула на инт, и везде добавить третье условие
конечно можно, переделать флаг с буула на инт, и везде добавить третье условие
могли бы вы еще добавить 3-е условие, или хотя бы кинуть любой пример где есть 3-е условие
Я пытаюсь сам добавить но пишет мол if и else может быть только одно, мол 3-го else не может быть.
могли бы вы еще добавить 3-е условие, или хотя бы кинуть любой пример где есть 3-е условие
Я пытаюсь сам добавить но пишет мол if и else может быть только одно, мол 3-го else не может быть.
тогда Вам поможет switch
могли бы вы еще добавить 3-е условие, или хотя бы кинуть любой пример где есть 3-е условие
Я пытаюсь сам добавить но пишет мол if и else может быть только одно, мол 3-го else не может быть.
СпасибО!!!))))