2015-08-10 2 views
0

Я делаю биржевые диаграммы с библиотекой amcharts. Вот то, что я достиг enter image description hereВопросы с amcharts

И вот что я хочу enter image description here

Вы можете сравнить как картину и увидеть меня цилиндрические и движущихся Avg граф (пунктирные линии), но я не могу добавить шипы, которые показывая внизу диаграммы в оригинальной. (Розовый и оранжевый цвет). Я не знаю, как добавить эти всплески в фондовой диаграмме. Мои данные динамично, так что я не могу создать Js скрипки, но я могу представить свою функцию здесь-

function load_stock_graph(graph_type, history, title, aggregate){ 
    // DEFINE CHART PLUGINS 
    AmCharts.averageGraphs = 0; 
    AmCharts.addMovingAverage = function (dataSet, panel, field, aggregate, col ,graph) { 
     // update dataset 
     var avgField = "avg"+AmCharts.averageGraphs; 
     dataSet.fieldMappings.push({ 
      fromField: avgField, 
      toField: avgField}); 

     // calculate moving average 
     var fc = 0; 
     var sum = 0; 
     for (var i = 0; i < dataSet.dataProvider.length; i++) { 
      // console.log(aggregate[i].ema_0008) 
      var dp = dataSet.dataProvider[i]; 
      if (dp[field] !== undefined) { 
       sum += dp[field]; 
       fc++; 
       if (aggregate[i] !== undefined){ 
        if(col == '08'){ 
         dp[avgField] = aggregate[i].ema_0008; 
        }else if(col == '15'){ 
         dp[avgField] = aggregate[i].ema_0015; 
        }else if(col == '20'){ 
         dp[avgField] = aggregate[i].ema_0020; 
        } 
       } 
      } 
     } 

     // create a graph 
     graph.valueField = avgField; 
     panel.stockGraphs.push(graph); 

     // increment average graph count 
     AmCharts.averageGraphs++; 
    } 

    // CHART DATA 
    var chartData = []; 
     var chartData1 = []; 

    generateChartData(history); 

    function generateChartData(history) { 
     var firstDate = new Date(); 
     firstDate.setHours(0, 0, 0, 0); 
     firstDate.setDate(firstDate.getDate() - 2000); 

     for (var i = 0; i < history.length; i++) { 
      var date = new Date(history[i].date); 

      var val = Math.round(Math.random() * (30) + 100); 

      chartData[i] = ({ 
       date: date, 
       open: history[i].open, 
       close: history[i].close, 
       high: history[i].high, 
       low: history[i].low, 
       volume: history[i].volume, 
       value: val 
      }); 



     } 
    } 



    // CHART CONFIG 
    var chartConfig = { 
     type: "stock", 
     pathToImages : "/static/img/amcharts/", 

     dataSets: [{ 
      fieldMappings: [{ 
       fromField: "open", 
       toField: "open" 
      }, { 
       fromField: "close", 
       toField: "close" 
      }, { 
       fromField: "high", 
       toField: "high" 
      }, { 
       fromField: "low", 
       toField: "low" 
      }, { 
       fromField: "volume", 
       toField: "volume" 
      }, { 
       fromField: "value", 
       toField: "val" 
      }], 

      color: "#fff", 
      dataProvider: chartData, 
      title: title, 
      categoryField: "date", 
      compared: false, 
     }, 
     { 
      fieldMappings: [{ 
       fromField: "value", 
       toField: "value" 
      }], 
      color: "#fff", 
      dataProvider: chartData, 
      title: title, 
      categoryField: "date" 
     }, 


     ], 


     panels: [{ 
       title: "Value", 
       percentHeight: 70, 


       stockGraphs: [{type: graph_type, 
         id: "g1", 
         openField: "open", 
         closeField: "close", 
         highField: "high", 
         lowField: "low", 
         valueField: "close", 
         lineColor: "#fff", 
         fillColors: "#fff", 
         negativeLineColor: "#db4c3c", 
         negativeFillColors: "#db4c3c", 
         fillAlphas: 1, 
         comparedGraphLineThickness: 2, 
         columnWidth: 0.7, 
         useDataSetColors: false, 
         comparable: true, 
         compareField: "close", 
         showBalloon: false, 
         //proCandlesticks: true 
        } ], 

       stockLegend: { 
        valueTextRegular: undefined, 
        periodValueTextComparing: "[[percents.value.close]]%" 
       } 
      }, 

      { 
       title: "Volume", 
       percentHeight: 40, 
       marginTop: 1, 
       columnWidth: 0.6, 
       showCategoryAxis: false, 
       valueAxes: [{ 
        usePrefixes: true 
       }], 



       stockGraphs: [ { 
         valueField: "volume", 
         openField: "open", 
         type: "column", 
         showBalloon: false, 
         fillAlphas: 1, 
         lineColor: "#fff", 
         fillColors: "#fff", 
         negativeLineColor: "#db4c3c", 
         negativeFillColors: "#db4c3c", 
         useDataSetColors: false, 
        } ], 

       stockLegend: { 
        markerType: "none", 
        markerSize: 0, 
        labelText: "", 
        periodValueTextRegular: "[[value.close]]" 
       } 
      } 


     ], 

     panelsSettings: { 
      color: "#fff", 
      plotAreaFillColors: "#333", 
      plotAreaFillAlphas: 1, 
      marginLeft: 60, 
      marginTop: 5, 
      marginBottom: 5 
     }, 

     chartScrollbarSettings: { 
      graph: "g1", 
      graphType: "line", 
      usePeriod: "WW", 
      backgroundColor: "#333", 
      graphFillColor: "#666", 
      graphFillAlpha: 0.5, 
      gridColor: "#555", 
      gridAlpha: 1, 
      selectedBackgroundColor: "#444", 
      selectedGraphFillAlpha: 1 
     }, 
     categoryAxesSettings: { 
      equalSpacing: true, 
      gridColor: "#555", 
      gridAlpha: 1 
     }, 

     valueAxesSettings: { 
      gridColor: "#555", 
      gridAlpha: 1, 
      inside: false, 
      showLastLabel: true 
     }, 

     chartCursorSettings: { 
      pan: true, 
      valueLineEnabled:true, 
      valueLineBalloonEnabled:true 
     }, 

     legendSettings: { 
      color: "#fff" 
     }, 

     stockEventsSettings: { 
      showAt: "high" 
     }, 

     balloon: { 
      textAlign: "left", 
      offsetY: 10 
     }, 

     periodSelector: { 
      position: "bottom", 

      periods: [ { 
      period: "DD", 
      count: 10, 
      label: "10D" 
      }, { 
      period: "MM", 
      count: 1, 
      label: "1M" 
      }, { 
      period: "MM", 
      count: 6, 
      selected: true, 
      label: "6M" 
      }, { 
      period: "YYYY", 
      count: 1, 
      label: "1Y" 
      }, { 
      period: "YYYY", 
      count: 2, 
      label: "2Y" 
      }, { 
      period: "YTD", 
      label: "YTD" 
      }, { 
      period: "MAX", 
      label: "MAX" 
      } ] 
     }, 
      "export": { 
      "enabled": true, 
      "backgroundColor": "#fff", 
      "dataDateFormat": "YYYY-MM-DD" 
     } 
    } 

    // ADD INDICATORS 
    // ema_0008 
    AmCharts.addMovingAverage(chartConfig.dataSets[0], chartConfig.panels[0], 'value',aggregate, '08', { 
     useDataSetColors: false, 
     color: "#ccffcc", 
     lineColor: "#F4F009", 
     title: "aggregate ema 0008", 
     dashLength: 3 
    }); 
    // ema_0015 
    AmCharts.addMovingAverage(chartConfig.dataSets[0], chartConfig.panels[0], 'value',aggregate, '15',{ 
     useDataSetColors: false, 
     color: "#ccffcc", 
     lineColor: "#2C7F1D", 
     title: "aggregate ema 0015", 
     dashLength: 3 
    }); 

    // ema_0020 
    AmCharts.addMovingAverage(chartConfig.dataSets[0], chartConfig.panels[0], 'value',aggregate, '20',{ 
     useDataSetColors: false, 
     color: "#ccffcc", 
     lineColor: "#A109E8", 
     title: "aggregate ema 0020", 
     dashLength: 3 
    }); 

    // Empty chart instance so that chart loaded via ajax can work correctly 
    AmCharts.charts = []; 

    // CREATE CHART 
    var chart = AmCharts.makeChart("chartdiv", chartConfig); 

} 
+0

ли эти розовые шипы некоторым автоматически рассчитанное индикатор, или они на самом деле имеют значение для них в ваших данных? – martynasma

+0

@martynasma У него есть значения как 0 и 1. Если 0, то вниз, и если 1, то вверх, иметь смысл? – saf

+0

Он делает. Итак, я полагаю, вы могли бы добавить розовый график для этих значений? Или я здесь без трека? – martynasma

ответ

1

Похоже, вам просто нужно добавить еще один линейный график в отдельной панели.

Вот как это сделать:

1) Добавить дополнительное поле в данных. В настоящее время у вас есть открытое, высокое, низкое, закрытое поле. Давайте добавим еще один, скажем, «розовый».

2) Обновите данные Сет fieldMappings свойства, чтобы учесть изменения:

[{ 
     fromField: "open", 
     toField: "open" 
    }, { 
     fromField: "close", 
     toField: "close" 
    }, { 
     fromField: "high", 
     toField: "high" 
    }, { 
     fromField: "low", 
     toField: "low" 
    }, { 
     fromField: "volume", 
     toField: "volume" 
    }, { 
     fromField: "value", 
     toField: "val" 
    }, { 
     fromField: "pink", 
     toField: "pink" 
    }] 

3) Добавить дополнительный припуск панель и график, который будет использовать поле вновь добавляемый данные:

{ 
    percentHeight: 20, 
    showCategoryAxis: false, 
    stockGraphs: [{ 
     valueField: "pink", 
     showBalloon: false, 
     lineColor: "#fb02fe", 
     lineThickness: 2, 
     useDataSetColors: false 
    }] 
    } 

Если бы вы хотели добавить индикатор к какой-либо существующей панели, вам просто нужно определить график в массиве stockGraphs. I.e .:

{ 
    percentHeight: 20, 
    showCategoryAxis: false, 
    stockGraphs: [{ 
     valueField: "pink", 
     showBalloon: false, 
     lineColor: "#fb02fe", 
     lineThickness: 2, 
     useDataSetColors: false 
    }, { 
     valueField: "red", 
     showBalloon: false, 
     lineColor: "#cc0000", 
     lineThickness: 2, 
     useDataSetColors: false 
    }] 
    } 

Используйте этот процесс, чтобы добавить столько индикаторов, сколько вам нужно.

Вот рабочий пример (со случайными значениями)

http://codepen.io/amcharts/pen/938b09efeabca4596c0a2cdaea60a269

+0

logarithmic не работает с Moving avg graph, это ошибка? – saf