//+------------------------------------------------------------------+ //| SynchroChart_Line.mq4 | //| Copyright 2022 | //| https://www.fxnav.net/ | //+------------------------------------------------------------------+ /******************************************************************** 著作権は「株式会社キーストン」が有しております。 The copyright belongs to "Keystone Co., Ltd." 無断再配布、再編を禁止します。 Unauthorized redistribution and reorganization are prohibited. 使用した事によって発生した損害は、一切補償しません。 We will not compensate for any damage caused by using it. *********************************************************************/ #property copyright "FX Keystone" //"FXキーストン" #property link "https://www.fxnav.net/mt4navi/synchro_chart_line/" #property description "Please let us know your impressions after using it." //"使ってみた感想などお聞かせください。" #property description "https://www.fxnav.net/mt4navi/synchro_chart_line/" #property version "2.0" #property strict #property indicator_chart_window enum sync{ allChart = 1, //Synchronized on all TimeFrames lowerChart = 2, //Synchronize only on lower chart upperChart = 3, //Synchronize only on upper chart sameChart = 4 //Synchronized on same TimeFrame }; input sync setting1 = 1; //Specify TimeFrame to synchronize input bool boolM1 = true; //Synchronize on M1 input bool boolM5 = true; //Synchronize on M5 input bool boolM15 = true; //Synchronize on M15 input bool boolM30 = true; //Synchronize on M30 input bool boolH1 = true; //Synchronize on H1 input bool boolH4 = true; //Synchronize on H4 input bool boolD1 = true; //Synchronize on D1 input bool boolW1 = true; //Synchronize on W1 input bool boolMN = true; //Synchronize on MN input bool boolOBJ_LINE = true; //Synchronize Lines input bool boolOBJ_CHANNEL = true; //Synchronize Channels input bool boolOBJ_GANN = true; //Synchronize Gann input bool boolOBJ_FIBO = true; //Synchronize Fibo input bool boolOBJ_SHAPE = true; //Synchronize Shapes input bool boolOBJ_ARROW = true; //Synchronize Arrows input bool boolOBJ_GRAPHIC = true; //Synchronize another graph.objects bool OneClick = false; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit(){ ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true); ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true); ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason){ } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]){ return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id == CHARTEVENT_MOUSE_MOVE){ if((uint)sparam == 1) OneClick = true; } if(id == CHARTEVENT_OBJECT_CREATE){ if(!objNameCheck(sparam) || OneClick == false) return; Synchro((ENUM_CHART_EVENT)id, sparam); } if(id == CHARTEVENT_OBJECT_CHANGE || id == CHARTEVENT_OBJECT_DRAG){ Synchro((ENUM_CHART_EVENT)id, sparam); } if(id == CHARTEVENT_OBJECT_DELETE){ string objName = sparam; long objChartID = ChartID(); ENUM_OBJECT objType = (ENUM_OBJECT)ObjectGetInteger(objChartID, objName, OBJPROP_TYPE); long currChart = ChartFirst(); while(true){ if(boolMatchChart(currChart)){ ObjectDelete(currChart, objName); ChartRedraw(currChart); } //ObjectDelete(currChart, objName); if(ChartNext(currChart) < 0) break; else currChart = ChartNext(currChart); } } if(id == CHARTEVENT_OBJECT_CLICK){ string objName = sparam; long objChartID = ChartID(); bool objSelectable = ObjectGetInteger(objChartID, objName, OBJPROP_SELECTABLE); bool objSelected = ObjectGetInteger(objChartID, objName, OBJPROP_SELECTED); long currChart = ChartFirst(); while(true){ if(boolMatchChart(currChart)){ ObjectSetInteger(currChart, objName, OBJPROP_SELECTABLE, objSelectable); ObjectSetInteger(currChart, objName, OBJPROP_SELECTED, objSelected); ChartRedraw(currChart); } if(ChartNext(currChart) < 0) break; else currChart = ChartNext(currChart); //ChartSymbol(currChart); } } } //+------------------------------------------------------------------+ bool boolMatchChart(long id){ if(ChartSymbol(id) == _Symbol && id != ChartID() && ((setting1 == 1) || (setting1 == 2 && _Period>=ChartPeriod(id)) || (setting1 == 3 && _Period<=ChartPeriod(id)) || (setting1 == 4 && _Period==ChartPeriod(id)))){ } else return false; if((boolM1 && ChartPeriod(id) == PERIOD_M1) || (boolM5 && ChartPeriod(id) == PERIOD_M5) || (boolM15 && ChartPeriod(id) == PERIOD_M15) || (boolM30 && ChartPeriod(id) == PERIOD_M30) || (boolH1 && ChartPeriod(id) == PERIOD_H1) || (boolH4 && ChartPeriod(id) == PERIOD_H4) || (boolD1 && ChartPeriod(id) == PERIOD_D1) || (boolW1 && ChartPeriod(id) == PERIOD_W1) || (boolMN && ChartPeriod(id) == PERIOD_MN1)){ } else return false; return true; } //+------------------------------------------------------------------+ bool objNameCheck(string name){ if(StringFind(name, "Vertical Line") == 0 || StringFind(name, "Horizontal Line") == 0 || StringFind(name, "Trendline") == 0 || StringFind(name, "Trend By Angle") == 0 || StringFind(name, "Cycle Lines") == 0 || StringFind(name, "Channel") == 0 || StringFind(name, "Equidistant Channel") == 0 || StringFind(name, "StdDev Channel") == 0 || StringFind(name, "Regression Channel") == 0 || StringFind(name, "Andrews Pitchfork") == 0 || StringFind(name, "Gann") == 0 || StringFind(name, "Fibo") == 0 || StringFind(name, "Expansion") == 0 || StringFind(name, "Rectangle") == 0 || StringFind(name, "Triangle") == 0 || StringFind(name, "Ellipse") == 0 || StringFind(name, "Arrow") == 0 || StringFind(name, "Text") == 0 || StringFind(name, "Label") == 0) return(true); else return(false); } //+------------------------------------------------------------------+ bool objTypesCheck(string obj_name){ ENUM_OBJECT obj_type = (ENUM_OBJECT)ObjectGetInteger(0, obj_name, OBJPROP_TYPE); //ライン系 //line system if(obj_type == OBJ_VLINE || obj_type == OBJ_HLINE || obj_type == OBJ_TREND || obj_type == OBJ_TRENDBYANGLE || obj_type == OBJ_CYCLES){ if(boolOBJ_LINE) return(true); else return(false); } //チャネル系 //channel system if(obj_type == OBJ_CHANNEL || obj_type == OBJ_STDDEVCHANNEL || obj_type == OBJ_REGRESSION || obj_type == OBJ_PITCHFORK){ if(boolOBJ_CHANNEL) return(true); else return(false); } //ギャン系 //gann system if(obj_type == OBJ_GANNLINE || obj_type == OBJ_GANNFAN || obj_type == OBJ_GANNGRID){ if(boolOBJ_GANN) return(true); else return(false); } //フィボナッチ系 //fibo system if(obj_type == OBJ_FIBO || obj_type == OBJ_FIBOTIMES || obj_type == OBJ_FIBOFAN || obj_type == OBJ_FIBOARC || obj_type == OBJ_FIBOCHANNEL || obj_type == OBJ_EXPANSION){ if(boolOBJ_FIBO) return(true); else return(false); } //図形系 //graphic system if(obj_type == OBJ_RECTANGLE || obj_type == OBJ_TRIANGLE || obj_type == OBJ_ELLIPSE){ if(boolOBJ_SHAPE) return(true); else return(false); } //矢印系 //arrow system if(obj_type == OBJ_ARROW_THUMB_UP || obj_type == OBJ_ARROW_THUMB_DOWN || obj_type == OBJ_ARROW_UP || obj_type == OBJ_ARROW_DOWN || obj_type == OBJ_ARROW_STOP || obj_type == OBJ_ARROW_CHECK || obj_type == OBJ_ARROW_LEFT_PRICE || obj_type == OBJ_ARROW_RIGHT_PRICE || obj_type == OBJ_ARROW_BUY || obj_type == OBJ_ARROW_SELL || obj_type == OBJ_ARROW){ if(boolOBJ_ARROW) return(true); else return(false); } //グラフィック系 //graphic system if(obj_type == OBJ_TEXT || obj_type == OBJ_LABEL || obj_type == OBJ_BUTTON || obj_type == OBJ_BITMAP || obj_type == OBJ_BITMAP_LABEL || obj_type == OBJ_EDIT || obj_type == OBJ_ARROW_LEFT_PRICE || obj_type == OBJ_ARROW_RIGHT_PRICE || obj_type == OBJ_EVENT || obj_type == OBJ_RECTANGLE_LABEL){ if(boolOBJ_GRAPHIC) return(true); else return(false); } return(false); } //+------------------------------------------------------------------+ void Synchro(ENUM_CHART_EVENT event_id, string synchro_name){ if(objTypesCheck(synchro_name) == false) return; string objName = synchro_name; long objChartID = ChartID(); //ENUM_OBJECT_PROPERTY_INTEGER ENUM_OBJECT objType = (ENUM_OBJECT)ObjectGetInteger(objChartID, objName, OBJPROP_TYPE); color objColor = (color)ObjectGetInteger(objChartID, objName, OBJPROP_COLOR); ENUM_LINE_STYLE objStyle = (ENUM_LINE_STYLE)ObjectGetInteger(objChartID, objName, OBJPROP_STYLE); int objWidth = (int)ObjectGetInteger(objChartID, objName, OBJPROP_WIDTH); bool objBack = ObjectGetInteger(objChartID, objName, OBJPROP_BACK); long objZorder = (long)ObjectGetInteger(objChartID, objName, OBJPROP_ZORDER); bool objFill = false; if(objType == OBJ_RECTANGLE || objType == OBJ_TRIANGLE || objType == OBJ_ELLIPSE || objType == OBJ_CHANNEL || objType == OBJ_STDDEVCHANNEL || objType == OBJ_REGRESSION){ objFill = (bool)ObjectGetInteger(objChartID, objName, OBJPROP_FILL); } bool objHidden = ObjectGetInteger(objChartID, objName, OBJPROP_HIDDEN); bool objSelected = ObjectGetInteger(objChartID, objName, OBJPROP_SELECTED); bool objReadonly = ObjectGetInteger(objChartID, objName, OBJPROP_READONLY); datetime objTime = (datetime)ObjectGetInteger(objChartID, objName, OBJPROP_TIME, 0); datetime objTime1 = (datetime)ObjectGetInteger(objChartID, objName, OBJPROP_TIME, 1); datetime objTime2 = (datetime)ObjectGetInteger(objChartID, objName, OBJPROP_TIME, 2); datetime objTime3 = 0; datetime objTime4 = 0; bool objSelectable = ObjectGetInteger(objChartID, objName, OBJPROP_SELECTABLE); //OBJPROP_CREATETIME int objLevels = 0; color objLevelColor = clrNONE; ENUM_LINE_STYLE objLevelStyle = 0; int objLevelWidth = 0; double objLevelValue[]; string objLevelText[]; if(objType == OBJ_FIBO || objType == OBJ_FIBOTIMES || objType == OBJ_FIBOFAN || objType == OBJ_FIBOARC || objType == OBJ_FIBOCHANNEL || objType == OBJ_EXPANSION){ objLevels = (int)ObjectGetInteger(objChartID, objName, OBJPROP_LEVELS); ArrayResize(objLevelValue, objLevels); ArrayResize(objLevelText, objLevels); objLevelColor = (color)ObjectGetInteger(objChartID, objName, OBJPROP_LEVELCOLOR); objLevelStyle = (ENUM_LINE_STYLE)ObjectGetInteger(objChartID, objName, OBJPROP_LEVELSTYLE); objLevelWidth = (int)ObjectGetInteger(objChartID, objName, OBJPROP_LEVELWIDTH); for(int i = 0; i < objLevels; i++){ ObjectGetDouble(objChartID, objName, OBJPROP_LEVELVALUE, i, objLevelValue[i]); ObjectGetString(objChartID, objName, OBJPROP_LEVELTEXT, i, objLevelText[i]); } } ENUM_ALIGN_MODE objAlign = 0; if(objType == OBJ_EDIT){ objAlign = (ENUM_ALIGN_MODE)ObjectGetInteger(objChartID, objName, OBJPROP_ALIGN); } int objFontSize = (int)ObjectGetInteger(objChartID, objName, OBJPROP_FONTSIZE); bool objRayRight = ObjectGetInteger(objChartID, objName, OBJPROP_RAY_RIGHT); bool objRayLeft = ObjectGetInteger(objChartID, objName, OBJPROP_RAY_LEFT); bool objRay = ObjectGetInteger(objChartID, objName, OBJPROP_RAY); bool objEllipse = false; if(objType == OBJ_FIBOARC){ objEllipse = ObjectGetInteger(objChartID, objName, OBJPROP_ELLIPSE); } uchar objArrowCode = (uchar)ObjectGetInteger(objChartID, objName, OBJPROP_ARROWCODE); uint objTimeframes = (uint)ObjectGetInteger(objChartID, objName, OBJPROP_TIMEFRAMES); ENUM_ARROW_ANCHOR objArrowAnchor = 0; ENUM_ANCHOR_POINT objAnchorPoint = 0; if(objType == OBJ_ARROW_THUMB_UP || objType == OBJ_ARROW_THUMB_DOWN || objType == OBJ_ARROW_UP || objType == OBJ_ARROW_DOWN || objType == OBJ_ARROW_STOP || objType == OBJ_ARROW_CHECK || objType == OBJ_ARROW_LEFT_PRICE || objType == OBJ_ARROW_RIGHT_PRICE || objType == OBJ_ARROW_BUY || objType == OBJ_ARROW_SELL || objType == OBJ_ARROW){ objArrowAnchor = (ENUM_ARROW_ANCHOR)ObjectGetInteger(objChartID, objName, OBJPROP_ANCHOR); } if(objType == OBJ_LABEL || objType == OBJ_BITMAP_LABEL || objType == OBJ_TEXT){ objAnchorPoint = (ENUM_ANCHOR_POINT)ObjectGetInteger(objChartID, objName, OBJPROP_ANCHOR); } int objXdistance = 0; int objYdistance = 0; if(objType == OBJ_BUTTON || objType == OBJ_RECTANGLE_LABEL || objType == OBJ_EDIT || objType == OBJ_CHART){ objXdistance = (int)ObjectGetInteger(objChartID, objName, OBJPROP_XDISTANCE); objYdistance = (int)ObjectGetInteger(objChartID, objName, OBJPROP_YDISTANCE); } ENUM_GANN_DIRECTION objDirectiion = 0; if(objType == OBJ_GANNFAN || objType == OBJ_GANNGRID){ objDirectiion = (ENUM_GANN_DIRECTION)ObjectGetInteger(objChartID, objName, OBJPROP_DIRECTION); } bool objState = (bool)ObjectGetInteger(objChartID, objName, OBJPROP_STATE); //OBBJPROP_CHART_ID int objXsize = 0; int objYsize = 0; if(objType == OBJ_LABEL || objType == OBJ_BUTTON || objType == OBJ_CHART || objType == OBJ_BITMAP || objType == OBJ_BITMAP_LABEL || objType == OBJ_EDIT || objType == OBJ_RECTANGLE_LABEL){ objXsize = (int)ObjectGetInteger(objChartID, objName, OBJPROP_XSIZE); objYsize = (int)ObjectGetInteger(objChartID, objName, OBJPROP_YSIZE); } int objXoffset = 0; int objYoffset = 0; if(objType == OBJ_BITMAP_LABEL || objType == OBJ_BITMAP){ objXsize = (int)ObjectGetInteger(objChartID, objName, OBJPROP_XOFFSET); objYsize = (int)ObjectGetInteger(objChartID, objName, OBJPROP_YOFFSET); } ENUM_TIMEFRAMES objPeriod = (ENUM_TIMEFRAMES)ObjectGetInteger(objChartID, objName, OBJPROP_PERIOD); bool objDateScale = (bool)ObjectGetInteger(objChartID, objName, OBJPROP_DATE_SCALE); bool objPriceScale = (bool)ObjectGetInteger(objChartID, objName, OBJPROP_PRICE_SCALE); int objChartScale = (int)ObjectGetInteger(objChartID, objName, OBJPROP_CHART_SCALE); color objBgcolor = clrNONE; if(objType == OBJ_EDIT || objType == OBJ_BUTTON || objType == OBJ_RECTANGLE_LABEL){ objBgcolor = (color)ObjectGetInteger(objChartID, objName, OBJPROP_BGCOLOR); } ENUM_BASE_CORNER objCorner = (ENUM_BASE_CORNER)ObjectGetInteger(objChartID, objName, OBJPROP_CORNER); ENUM_BORDER_TYPE objBorderType = (ENUM_BORDER_TYPE)ObjectGetInteger(objChartID, objName, OBJPROP_BORDER_TYPE); color objBorderColor = clrNONE; if(objType == OBJ_EDIT || objType == OBJ_BUTTON){ objBorderColor = (color)ObjectGetInteger(objChartID, objName, OBJPROP_BORDER_COLOR); } //ENUM_OBJECT_PROPERTY_DOUBLE double objPrice = ObjectGetDouble(objChartID, objName, OBJPROP_PRICE, 0); double objPrice1 = ObjectGetDouble(objChartID, objName, OBJPROP_PRICE, 1); double objPrice2 = ObjectGetDouble(objChartID, objName, OBJPROP_PRICE, 2); double objPrice3 = 0.0; double objPrice4 = 0.0; double objScale = 0.0; if(objType == OBJ_GANNFAN || objType == OBJ_GANNGRID || OBJ_GANNLINE || OBJ_FIBOARC){ objScale = ObjectGetDouble(objChartID, objName, OBJPROP_SCALE); } double objAngle = ObjectGetDouble(objChartID, objName, OBJPROP_ANGLE); double objDeviation = ObjectGetDouble(objChartID, objName, OBJPROP_DEVIATION); //ENUM_OBJECT_PROPERTY_STRING string objText = ObjectGetString(objChartID, objName, OBJPROP_TEXT); string objTooltip = ObjectGetString(objChartID, objName, OBJPROP_TOOLTIP); string objFont = ObjectGetString(objChartID, objName, OBJPROP_FONT); string objBmpFile = ""; string objBmpFile1 = ""; if(objType == OBJ_BITMAP_LABEL){ objBmpFile = ObjectGetString(objChartID, objName, OBJPROP_BMPFILE, 0); objBmpFile1 = ObjectGetString(objChartID, objName, OBJPROP_BMPFILE, 1); } long currChart = ChartFirst(); while(true){ if(boolMatchChart(currChart) == false || currChart == objChartID){ if(ChartNext(currChart) < 0) break; else currChart = ChartNext(currChart); continue; } if(event_id == CHARTEVENT_OBJECT_CREATE){ //クリックしながら表示(3パラメーター系) //Display while clicking (3 parameter system) if(objType == OBJ_PITCHFORK ||objType == OBJ_TRIANGLE || objType == OBJ_ELLIPSE){ //最初のワンクリックで表示するのでパラメーターは1つだけ //Only one parameter because it is displayed with the first one click if(ObjectFind(currChart, objName) < 0) ObjectCreate(currChart, objName, objType, 0, 0, 0.0); } else{ //他のオブジェクトはドラッグするタイプ //Other objects are drag type if(ObjectFind(currChart, objName) < 0) ObjectCreate(currChart, objName, objType, 0, objTime, objPrice, objTime1, objPrice1, objTime2, objPrice2); } } else{ ObjectSetInteger(currChart, objName, OBJPROP_TIME, 0, objTime); ObjectSetInteger(currChart, objName, OBJPROP_TIME, 1, objTime1); ObjectSetInteger(currChart, objName, OBJPROP_TIME, 2, objTime2); ObjectSetDouble(currChart, objName, OBJPROP_PRICE, 0, objPrice); ObjectSetDouble(currChart, objName, OBJPROP_PRICE, 1, objPrice1); ObjectSetDouble(currChart, objName, OBJPROP_PRICE, 2, objPrice2); } if(event_id == CHARTEVENT_OBJECT_CHANGE){ if(objType != ObjectGetInteger(currChart, objName, OBJPROP_TYPE)){ //ObjectDelete(currChart, objName); //ChartRedraw(currChart); //if(ObjectFind(currChart, objName) < 0) ObjectCreate(currChart, objName, objType, 0, objTime, objPrice); } } ObjectSetInteger(currChart, objName, OBJPROP_COLOR, objColor); ObjectSetInteger(currChart, objName, OBJPROP_STYLE, objStyle); ObjectSetInteger(currChart, objName, OBJPROP_WIDTH, objWidth); //ObjectSetInteger(currChart, objName, OBJPROP_BACK, objBack); ObjectSetInteger(currChart, objName, OBJPROP_ZORDER, objZorder); if(objType == OBJ_RECTANGLE || objType == OBJ_TRIANGLE || objType == OBJ_ELLIPSE || objType == OBJ_CHANNEL || objType == OBJ_STDDEVCHANNEL || objType == OBJ_REGRESSION){ //OBJPROP_FILLが機能しない //doesn't work ObjectSetInteger(currChart, objName, OBJPROP_BACK, true); ObjectSetInteger(objChartID, objName, OBJPROP_FILL, objFill); } //OBJPROP_FILLを機能させるためここに移動 //moved here to make it work ObjectSetInteger(currChart, objName, OBJPROP_BACK, objBack); ObjectSetInteger(objChartID, objName, OBJPROP_HIDDEN, objHidden); ObjectSetInteger(currChart, objName, OBJPROP_SELECTED, true); ObjectSetInteger(currChart, objName, OBJPROP_READONLY, objReadonly); ObjectSetInteger(currChart, objName, OBJPROP_TIME, 0, objTime); ObjectSetInteger(currChart, objName, OBJPROP_TIME, 1, objTime1); ObjectSetInteger(currChart, objName, OBJPROP_TIME, 2, objTime2); ObjectSetInteger(currChart, objName, OBJPROP_SELECTABLE, objSelectable); if(objType == OBJ_FIBO || objType == OBJ_FIBOTIMES || objType == OBJ_FIBOFAN || objType == OBJ_FIBOARC || objType == OBJ_FIBOCHANNEL || objType == OBJ_EXPANSION){ ObjectSetInteger(currChart, objName, OBJPROP_LEVELS, objLevels); for(int i = 0; i < objLevels; i++){ ObjectSetInteger(currChart, objName, OBJPROP_LEVELCOLOR, i, objLevelColor); ObjectSetInteger(currChart, objName, OBJPROP_LEVELSTYLE, i, objLevelStyle); ObjectSetInteger(currChart, objName, OBJPROP_LEVELWIDTH, i, objLevelWidth); ObjectSetDouble(currChart, objName, OBJPROP_LEVELVALUE, i, objLevelValue[i]); ObjectSetString(currChart, objName, OBJPROP_LEVELTEXT, i, objLevelText[i]); } } if(objType == OBJ_EDIT){ ObjectSetInteger(currChart, objName, OBJPROP_ALIGN, objAlign); } ObjectSetInteger(currChart, objName, OBJPROP_FONTSIZE, objFontSize); ObjectSetInteger(currChart, objName, OBJPROP_RAY_RIGHT, objRayRight); ObjectSetInteger(currChart, objName, OBJPROP_RAY_LEFT, objRayLeft); ObjectSetInteger(currChart, objName, OBJPROP_RAY, objRay); if(objType == OBJ_FIBOARC){ ObjectSetInteger(currChart, objName, OBJPROP_ELLIPSE, objEllipse); } ObjectSetInteger(currChart, objName, OBJPROP_ARROWCODE, objArrowCode); ObjectSetInteger(currChart, objName, OBJPROP_TIMEFRAMES, objTimeframes); if(objType == OBJ_ARROW_THUMB_UP || objType == OBJ_ARROW_THUMB_DOWN || objType == OBJ_ARROW_UP || objType == OBJ_ARROW_DOWN || objType == OBJ_ARROW_STOP || objType == OBJ_ARROW_CHECK || objType == OBJ_ARROW_LEFT_PRICE || objType == OBJ_ARROW_RIGHT_PRICE || objType == OBJ_ARROW_BUY || objType == OBJ_ARROW_SELL || objType == OBJ_ARROW){ ObjectSetInteger(currChart, objName, OBJPROP_ANCHOR, objArrowAnchor); } if(objType == OBJ_LABEL || objType == OBJ_BITMAP_LABEL || objType == OBJ_TEXT){ ObjectSetInteger(currChart, objName, OBJPROP_ANCHOR, objAnchorPoint); } if(objType == OBJ_BUTTON || objType == OBJ_RECTANGLE_LABEL || objType == OBJ_EDIT || objType == OBJ_CHART){ ObjectSetInteger(currChart, objName, OBJPROP_XDISTANCE, objXdistance); ObjectSetInteger(currChart, objName, OBJPROP_YDISTANCE, objYdistance); } if(objType == OBJ_GANNFAN || objType == OBJ_GANNGRID){ ObjectSetInteger(currChart, objName, OBJPROP_DIRECTION, objDirectiion); } ObjectSetInteger(currChart, objName, OBJPROP_STATE, objState); if(objType == OBJ_LABEL || objType == OBJ_BUTTON || objType == OBJ_CHART || objType == OBJ_BITMAP || objType == OBJ_BITMAP_LABEL || objType == OBJ_EDIT || objType == OBJ_RECTANGLE_LABEL){ ObjectSetInteger(currChart, objName, OBJPROP_XSIZE, objXsize); ObjectSetInteger(currChart, objName, OBJPROP_YSIZE, objYsize); } if(objType == OBJ_BITMAP_LABEL || objType == OBJ_BITMAP){ ObjectSetInteger(currChart, objName, OBJPROP_XOFFSET, objXoffset); ObjectSetInteger(currChart, objName, OBJPROP_YOFFSET, objYoffset); } ObjectSetInteger(currChart, objName, OBJPROP_PERIOD, objPeriod); ObjectSetInteger(currChart, objName, OBJPROP_DATE_SCALE, objDateScale); ObjectSetInteger(currChart, objName, OBJPROP_PRICE_SCALE, objPriceScale); ObjectSetInteger(currChart, objName, OBJPROP_CHART_SCALE, objChartScale); ObjectSetInteger(currChart, objName, OBJPROP_CORNER, objCorner); ObjectSetInteger(currChart, objName, OBJPROP_BORDER_TYPE, objBorderType); if(objType == OBJ_EDIT || objType == OBJ_BUTTON){ ObjectSetInteger(currChart, objName, OBJPROP_BORDER_COLOR, objBorderColor); } //ENUM_OBJECT_PROPERTY_DOUBLE if(objType == OBJ_GANNFAN || objType == OBJ_GANNGRID || objType == OBJ_GANNLINE || objType == OBJ_FIBOARC){ ObjectSetDouble(currChart, objName, OBJPROP_SCALE, objScale); } ObjectSetDouble(currChart, objName, OBJPROP_ANGLE, objAngle); ObjectSetDouble(currChart, objName, OBJPROP_DEVIATION, objDeviation); //ENUM_OBJECT_PROPERTY_STRING ObjectSetString(currChart, objName, OBJPROP_TEXT, objText); ObjectSetString(currChart, objName, OBJPROP_TOOLTIP, objTooltip); ObjectSetString(currChart, objName, OBJPROP_FONT, objFont); if(objType == OBJ_BITMAP_LABEL){ ObjectSetString(currChart, objName, OBJPROP_BMPFILE, 0, objBmpFile); ObjectSetString(currChart, objName, OBJPROP_BMPFILE, 1, objBmpFile1); } ChartRedraw(currChart); if(ChartNext(currChart) < 0) break; else currChart = ChartNext(currChart); //ChartSymbol(currChart); } if(event_id == CHARTEVENT_OBJECT_CREATE){ OneClick = false; } }