Я хочу знать, если я 1 лот в USDJPY и хочу получить прибыль в размере 100 долларов, то какое расстояние мне придется преодолеть?
Если 1 лот неверен, то как я могу получить расчет лота, поскольку есть разница в расчете прибыли для разных символов.
Помогите, пожалуйста. Я знаю, что это очень идиотский вопрос, но все же хочу избежать путаницы.
Можете ли вы помочь мне написать функцию, которая сможет управлять ею автоматически?
У меня есть прибыль, которую нужно заработать = 100 долларов. И если я хочу получить только 10 пипсов в USDJPY или любой другой валюте, то какой расчет или информация о символах могут помочь мне решить это.
Я прочитал с форума. Но меня это сбивает.
Так что нужно знать простым способом.
1 лот верен, но вы ищете не там.
у каждого символа есть стоимость пункта, которая пропорциональна лоту.
Какой терминал используете ? попробую найти код индикатора
//+------------------------------------------------------------------+ //| InfoIndikator.mq4 | //+------------------------------------------------------------------+ #property version "2.00" #property strict #property indicator_chart_window extern double MarginLot = 0.01; extern double Risk = 1; extern int StopLoss = 50; extern bool VisualBalance = true; extern bool VisuaZeroLevel = true; extern int XDistance = 0; extern int YDistance = 0; extern color SpreadColor = clrGoldenrod; extern color MarginColor = clrLightSeaGreen; extern color TickColor = clrSeaGreen; extern color RiskColor = clrMaroon; extern color SwopColor = clrBlack; extern color ZeroLevelColor = clrGreen; string OBJ_NAME="SpreadIndikatorObj"; string OBJ_NAME1="MarginIndikatorObj"; string OBJ_NAME2="TickIndikatorObj"; string OBJ_NAME3="RiskIndikatorObj"; string OBJ_NAME4="SwopIndikatorObj"; //============================== double Balance, Equity ; string txt,txt1; string txt2=""; string txt3=""; color col = ForestGreen; //============================== int init() { Info(); return (0); } //============================== int deinit() { ObjectDelete(OBJ_NAME); ObjectDelete(OBJ_NAME1); ObjectDelete(OBJ_NAME2); ObjectDelete(OBJ_NAME3); ObjectDelete(OBJ_NAME4); ObjectDelete("ZeroLevel"); // ZeroLevel //---- ObjectDelete("Lable2"); // Balance ObjectDelete("Lable3"); // Equity //---- return (0); } //============================= int start() { Info(); // отрисовка уровня безубытка if (VisuaZeroLevel == true) { SetHLine(ZeroLevelColor,"ZeroLevel",Zero_Level (Symbol()),STYLE_DOT,1); } {//Balance if (VisualBalance == true) // отображать или нет, настраивается в меню { Balance = NormalizeDouble( AccountBalance(),2); Equity = NormalizeDouble(AccountEquity(),2); if (Equity >= Balance/6*5) col = DodgerBlue; if (Equity >= Balance/6*4 && Equity < Balance/6*5)col = DeepSkyBlue; if (Equity >= Balance/6*3 && Equity < Balance/6*4)col = Gold; if (Equity >= Balance/6*2 && Equity < Balance/6*3)col = OrangeRed; if (Equity >= Balance/6 && Equity < Balance/6*2)col = Crimson; if (Equity < Balance/5 )col = Red; //------------------------- ObjectDelete("Lable2"); ObjectCreate("Lable2",OBJ_LABEL,0,0,1.0); ObjectSet("Lable2", OBJPROP_CORNER, 3); ObjectSet("Lable2", OBJPROP_XDISTANCE, 14); ObjectSet("Lable2", OBJPROP_YDISTANCE, 31); txt2=(DoubleToStr(AccountBalance(), 2)); ObjectSetText("Lable2","Balance "+txt2+"",16,"Times New Roman",DodgerBlue); //------------------------- ObjectDelete("Lable3"); ObjectCreate("Lable3",OBJ_LABEL,0,0,1.0); ObjectSet("Lable3", OBJPROP_CORNER, 3); ObjectSet("Lable3", OBJPROP_XDISTANCE, 14); ObjectSet("Lable3", OBJPROP_YDISTANCE, 11); txt3=(DoubleToStr(AccountEquity(), 2)); ObjectSetText("Lable3","Equity "+txt3+"",16,"Times New Roman",col); } }//End return (0); } //============================= void Info() { static double spread; static double margin; static double tick; static double risk; static double swoplong; static double swopshort; spread = MarketInfo(Symbol(), MODE_SPREAD); margin = (MarketInfo(Symbol(), MODE_MARGINREQUIRED)*MarginLot); tick = (MarketInfo(Symbol(), MODE_TICKVALUE)*MarginLot); risk = LotSize(); swoplong = MarketInfo(Symbol(), MODE_SWAPLONG); swopshort = MarketInfo(Symbol(), MODE_SWAPSHORT); DrawOnChart(spread,margin,tick,risk,swoplong,swopshort); } void DrawOnChart(double spread,double margin,double tick,double risk,double swoplong,double swopshort) { string s = "Spread: "+DoubleToStr(spread, 0)+" points"; string s1 = "Lot: "+DoubleToStr(MarginLot, 2)+ " Margin: "+DoubleToStr(margin, 2)+" "+AccountInfoString(ACCOUNT_CURRENCY); string s2 = "TickValue: "+DoubleToStr(tick, Digits)+" "+AccountInfoString(ACCOUNT_CURRENCY); string s3 = "Risk: "+DoubleToStr(Risk, 1)+" %"+" StopLoss: "+DoubleToStr(StopLoss, 0)+" pp"+" Lot: "+DoubleToStr(risk, 2); string s4 = "SwopLong: "+DoubleToStr(swoplong, 3)+" SwopShort: "+DoubleToStr(swopshort, 3); if(ObjectFind(OBJ_NAME) < 0) { ObjectCreate(OBJ_NAME, OBJ_LABEL, 0, 0, 0); ObjectSet(OBJ_NAME, OBJPROP_CORNER, 0); ObjectSet(OBJ_NAME, OBJPROP_YDISTANCE, 12+YDistance); ObjectSet(OBJ_NAME, OBJPROP_XDISTANCE, 14+XDistance); ObjectSetText(OBJ_NAME, s, 10, "FixedSys", SpreadColor); } if(ObjectFind(OBJ_NAME1) < 0) { ObjectCreate(OBJ_NAME1, OBJ_LABEL, 0, 0, 0); ObjectSet(OBJ_NAME1, OBJPROP_CORNER, 0); ObjectSet(OBJ_NAME1, OBJPROP_YDISTANCE, 24+YDistance); ObjectSet(OBJ_NAME1, OBJPROP_XDISTANCE, 14+XDistance); ObjectSetText(OBJ_NAME1, s1, 10, "FixedSys", MarginColor); } if(ObjectFind(OBJ_NAME2) < 0) { ObjectCreate(OBJ_NAME2, OBJ_LABEL, 0, 0, 0); ObjectSet(OBJ_NAME2, OBJPROP_CORNER, 0); ObjectSet(OBJ_NAME2, OBJPROP_YDISTANCE, 36+YDistance); ObjectSet(OBJ_NAME2, OBJPROP_XDISTANCE, 14+XDistance); ObjectSetText(OBJ_NAME2, s2, 10, "FixedSys", TickColor); } if(ObjectFind(OBJ_NAME3) < 0) { ObjectCreate(OBJ_NAME3, OBJ_LABEL, 0, 0, 0); ObjectSet(OBJ_NAME3, OBJPROP_CORNER, 0); ObjectSet(OBJ_NAME3, OBJPROP_YDISTANCE, 48+YDistance); ObjectSet(OBJ_NAME3, OBJPROP_XDISTANCE, 14+XDistance); ObjectSetText(OBJ_NAME3, s3, 10, "FixedSys", RiskColor); } if(ObjectFind(OBJ_NAME4) < 0) { ObjectCreate(OBJ_NAME4, OBJ_LABEL, 0, 0, 0); ObjectSet(OBJ_NAME4, OBJPROP_CORNER, 0); ObjectSet(OBJ_NAME4, OBJPROP_YDISTANCE, 60+YDistance); ObjectSet(OBJ_NAME4, OBJPROP_XDISTANCE, 14+XDistance); ObjectSetText(OBJ_NAME4, s4, 10, "FixedSys", SwopColor); } ObjectSetText(OBJ_NAME, s); ObjectSetText(OBJ_NAME1, s1); ObjectSetText(OBJ_NAME2, s2); ObjectSetText(OBJ_NAME3, s3); ObjectSetText(OBJ_NAME4, s4); WindowRedraw(); } //=============================================================== double LotSize() { if (StopLoss == 0) return(0); // no zero divide double Free =AccountBalance(); double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); if (Step==0) return (0); // no zero divide if ((StopLoss*LotVal)/Step==0) return (0); // no zero divide double Lot =MathFloor((Free*Risk/100)/(StopLoss*LotVal)/Step)*Step; if(Lot<Min_Lot) Lot=Min_Lot; if(Lot>Max_Lot) Lot=Max_Lot; return(Lot); } // End //+------------------------------------------------------------------+ //| Zero_Level.mq4 | //| Copyright © 2007, Xupypr | //+------------------------------------------------------------------+ // Функция вычисляющая уровни без убытка, на покупку, на продажу с учетом накопленных свопов. double Zero_Level (string sy) { double ZeroLevel=0; double BuyLots=0; double SellLots=0; double BuyProfit=0; double SellProfit=0; double SellLevel; double BuyLevel; string SLVirtual=":SLVirtual"; //добавление комментария к символу для поиска глобальной переменной виртуального трейлинга пирамиды int Total=OrdersTotal(); for(int i=Total-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()!=sy) continue; if(OrderType()==OP_BUY) { BuyLots=BuyLots+OrderLots(); BuyProfit=BuyProfit+OrderProfit()+OrderCommission()+OrderSwap(); } if (OrderType()==OP_SELL) { SellLots=SellLots+OrderLots(); SellProfit=SellProfit+OrderProfit()+OrderCommission()+OrderSwap(); } } } double TickValue=MarketInfo(sy,MODE_TICKVALUE); if (BuyLots>0) BuyLevel=NormalizeDouble(MarketInfo(sy,MODE_BID)-(BuyProfit/(TickValue*BuyLots)*MarketInfo(sy,MODE_POINT)),(int)MarketInfo(sy,MODE_DIGITS)); else BuyLevel=0; if (SellLots>0) SellLevel=NormalizeDouble(MarketInfo(sy,MODE_ASK)+(SellProfit/(TickValue*SellLots)*MarketInfo(sy,MODE_POINT)),(int)MarketInfo(sy,MODE_DIGITS)); else SellLevel=0; if (BuyLevel>0) ZeroLevel=BuyLevel; if (SellLevel>0) ZeroLevel=SellLevel; return(ZeroLevel); } // End //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 30.03.2008 | //| Описание : Установка объекта OBJ_HLINE горизонтальная линия | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ("" - время открытия текущего бара) | //| p1 - ценовой уровень (0 - Bid) | //| st - стиль линии (0 - простая линия) | //| wd - ширина линии (0 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (p1<=0) p1=Bid; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0); ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_STYLE , st); ObjectSet(nm, OBJPROP_WIDTH , wd); } //END
Это под МТ4 но должно и в пятом работать.
Визуально показывает риск и стоимость пунктов для любых инструментов.
тоже что то химичил в этом эксперте (https://www.mql5.com/ru/code/30444) - все равно не точно в пунктах получилось, в валюте совпадает
в пунктах не большая разница
тоже что то химичил в этом эксперте (https://www.mql5.com/ru/code/30444) - все равно не точно в пунктах получилось, в валюте совпадает
в пунктах не большая разница
Вот пытался чего то добиться - вроде что то рядом. пробуйте сами найти способ - начало есть! (где жёлтым - там надо настроить пункты)
//+------------------------------------------------------------------+ //| Profit_Point.mq5 | //| Copyright 2021, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //--- #define InpMagic 131889285 //--- #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> CPositionInfo m_position; // trade position object CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object //--- input int StopLoss = 1000; // Stop loss input int TakeProfit = 250; // Take profit input double Vol = 0.01; // Trade volume (lot size) input double InpPoints = 100000; // :Gold=100/:JPY=1000/:USD=100000 //--- double m_adjusted_point; // point value adjusted for 3 or 5 points string txt,m_name[]= {"BUY","SELL"}; double change,ask,bid,buy_sl,buy_tp,sell_sl,sell_tp; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(!m_symbol.Name(Symbol())) // sets symbol name return(INIT_FAILED);; RefreshRates(); //--- m_trade.SetExpertMagicNumber(InpMagic); m_trade.SetMarginMode(); m_trade.SetTypeFillingBySymbol(m_symbol.Name()); //--- tuning for 3 or 5 digits int digits_adjust=1; if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10; m_adjusted_point=m_symbol.Point()*digits_adjust; //--- set default deviation for trading in adjusted points //--- set default deviation for trading in adjusted points m_trade.SetDeviationInPoints(3*digits_adjust); //--- int _y=100; for(int i=0; i<ArraySize(m_name); i++) { ButtonCreate(m_name[i],5,_y,130,20,10); _y=_y+25; } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(int i=0; i<ArraySize(m_name); i++) { ObjectDelete(0,Symbol()+m_name[i]); }; ObjectsDeleteAll(0,"cm"); //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); buy_sl = NormalizeDouble(ask-StopLoss*_Point,_Digits); buy_tp = NormalizeDouble(ask+TakeProfit*_Point,_Digits); sell_sl = NormalizeDouble(bid+StopLoss*_Point,_Digits); sell_tp = NormalizeDouble(bid-TakeProfit*_Point,_Digits); //--- if(ObjectGetInteger(0,m_symbol.Name()+"SELL",OBJPROP_STATE)!=0) { ObjectSetInteger(0,m_symbol.Name()+"SELL",OBJPROP_STATE,0); if(!m_trade.Sell(Vol,_Symbol,bid,sell_sl,sell_tp)) { Print("failed to send order. Error: ",GetLastError()); return; } PlaySound("ok.wav"); } if(ObjectGetInteger(0,m_symbol.Name()+"BUY",OBJPROP_STATE)!=0) { ObjectSetInteger(0,m_symbol.Name()+"BUY",OBJPROP_STATE,0); if(!m_trade.Buy(Vol,_Symbol,ask,buy_sl,buy_tp)) { Print("failed to send order. Error: ",GetLastError()); return; } PlaySound("ok.wav"); } Optimized(); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ void Optimized(void) { double PROFIT_BUY=0.00; double PROFIT_SELL=0.00; double PROFIT_BUY_1=0.00; double PROFIT_SELL_1=0.00; double m_Point=NormalizeDouble(InpPoints*_Point,_Digits); //--- for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions { string position_GetSymbol=PositionGetSymbol(i); // GetSymbol позиции if(position_GetSymbol==m_symbol.Name()) { if(m_position.PositionType()==POSITION_TYPE_BUY) { PROFIT_BUY=PROFIT_BUY+PositionGetDouble(POSITION_PROFIT); } else { PROFIT_SELL=PROFIT_SELL+PositionGetDouble(POSITION_PROFIT); } if(m_position.PositionType()==POSITION_TYPE_BUY) { PROFIT_BUY_1=PROFIT_BUY_1+(PositionGetDouble(POSITION_PROFIT)/PositionGetDouble(POSITION_VOLUME)/ SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)/m_Point); } else { PROFIT_SELL_1=PROFIT_SELL_1+(PositionGetDouble(POSITION_PROFIT)/PositionGetDouble(POSITION_VOLUME)/ SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)/m_Point); } } } StringConcatenate(txt,"SELL в пунктах=",DoubleToString(PROFIT_SELL_1,2)); DrawLABEL(2,"cm 2",txt,5,30,clrDarkOrange,ANCHOR_RIGHT); StringConcatenate(txt,"SELL в валюте=",DoubleToString(PROFIT_SELL,2)); DrawLABEL(2,"cm 3",txt,5,45,clrDarkOrange,ANCHOR_RIGHT); StringConcatenate(txt,"BUY в пунктах=",DoubleToString(PROFIT_BUY_1,2)); DrawLABEL(2,"cm 4",txt,5,75,clrMediumSeaGreen,ANCHOR_RIGHT); StringConcatenate(txt,"BUY в валюте=",DoubleToString(PROFIT_BUY,2)); DrawLABEL(2,"cm 5",txt,5,90,clrMediumSeaGreen,ANCHOR_RIGHT); StringConcatenate(txt,"Средства=",DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY),2)); DrawLABEL(3,"cm 6",txt,5,25,clrLime,ANCHOR_RIGHT); } //+------------------------------------------------------------------+ //| DrawLABEL | //+------------------------------------------------------------------+ void DrawLABEL(int c,string name,string text,int X,int Y,color clr,int ANCHOR=ANCHOR_LEFT,int FONTSIZE=8) { if(ObjectFind(0,name)==-1) { ObjectCreate(0,name,OBJ_LABEL,0,0,0); ObjectSetInteger(0,name,OBJPROP_CORNER,c); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,X); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,Y); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,name,OBJPROP_SELECTED,false); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FONTSIZE); ObjectSetString(0,name,OBJPROP_FONT,"Arial"); ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR); } ObjectSetString(0,name,OBJPROP_TEXT,text); ObjectSetInteger(0,name,OBJPROP_COLOR,clr); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ButtonCreate(string name,int Xdist, int Ydist,int Xsize,int Ysize,int FONTSIZE=12) { if(ObjectFind(0,m_symbol.Name()+name)<0) ObjectCreate(0,m_symbol.Name()+name,OBJ_BUTTON,0,100,100); ObjectSetInteger(0,m_symbol.Name()+name,OBJPROP_COLOR,clrGray); ObjectSetInteger(0,m_symbol.Name()+name,OBJPROP_BGCOLOR,clrBlack); ObjectSetInteger(0,m_symbol.Name()+name,OBJPROP_XDISTANCE,Xdist); ObjectSetInteger(0,m_symbol.Name()+name,OBJPROP_YDISTANCE,Ydist); ObjectSetInteger(0,m_symbol.Name()+name,OBJPROP_XSIZE,Xsize); ObjectSetInteger(0,m_symbol.Name()+name,OBJPROP_YSIZE,Ysize); ObjectSetString(0,m_symbol.Name()+name,OBJPROP_FONT,"Sans Serif"); ObjectSetString(0,m_symbol.Name()+name,OBJPROP_TEXT,name); ObjectSetInteger(0,m_symbol.Name()+name,OBJPROP_FONTSIZE,FONTSIZE); ObjectSetInteger(0,m_symbol.Name()+name,OBJPROP_SELECTABLE,false); } //+------------------------------------------------------------------+ //| Refreshes the symbol quotes data | //+------------------------------------------------------------------+ bool RefreshRates() { //--- refresh rates if(!m_symbol.RefreshRates()) { Print(__FILE__," ",__FUNCTION__,", ERROR: ","RefreshRates error"); return(false); } //--- protection against the return value of "zero" if(m_symbol.Ask()==0 || m_symbol.Bid()==0) { Print(__FILE__," ",__FUNCTION__,", ERROR: ","Ask == 0.0 OR Bid == 0.0"); return(false); } //--- return(true); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я хочу знать, если я 1 лот в USDJPY и хочу получить прибыль в размере 100 долларов, то какое расстояние мне придется преодолеть?
Если 1 лот неверен, то как я могу получить расчет лота, поскольку есть разница в расчете прибыли для разных символов.
Помогите, пожалуйста. Я знаю, что это очень идиотский вопрос, но все же хочу избежать путаницы.
Можете ли вы помочь мне написать функцию, которая сможет управлять ею автоматически?
У меня есть прибыль, которую нужно заработать = 100 долларов. И если я хочу получить только 10 пипсов в USDJPY или любой другой валюте, то какой расчет или информация о символах могут помочь мне решить это.
Я прочитал с форума. Но меня это сбивает.
Так что нужно знать простым способом.