Here is bare bone code to dispaly "Hi" on everybar based on close. Thanks to all for sharing the code, used some the shared ref.
package extensions.Suk;
import java.awt.Color;
import java.awt.Font;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import com.motivewave.platform.sdk.common.Coordinate;
import com.motivewave.platform.sdk.common.DataContext;
import com.motivewave.platform.sdk.common.DataSeries;
import com.motivewave.platform.sdk.common.Defaults;
import com.motivewave.platform.sdk.common.Enums;
import com.motivewave.platform.sdk.common.FontInfo;
import com.motivewave.platform.sdk.common.Inputs;
import com.motivewave.platform.sdk.common.MarkerInfo;
import com.motivewave.platform.sdk.common.Settings;
import com.motivewave.platform.sdk.common.Util;
import com.motivewave.platform.sdk.common.desc.BooleanDescriptor;
import com.motivewave.platform.sdk.common.desc.EnabledDependency;
import com.motivewave.platform.sdk.common.desc.FontDescriptor;
import com.motivewave.platform.sdk.common.desc.InputDescriptor;
import com.motivewave.platform.sdk.common.desc.IntegerDescriptor;
import com.motivewave.platform.sdk.common.desc.MAMethodDescriptor;
import com.motivewave.platform.sdk.common.desc.MarkerDescriptor;
import com.motivewave.platform.sdk.common.desc.SettingGroup;
import com.motivewave.platform.sdk.common.desc.SettingTab;
import com.motivewave.platform.sdk.common.desc.SettingsDescriptor;
import com.motivewave.platform.sdk.draw.Label;
import com.motivewave.platform.sdk.draw.Marker;
import com.motivewave.platform.sdk.study.RuntimeDescriptor;
import com.motivewave.platform.sdk.study.Study;
import com.motivewave.platform.sdk.study.StudyHeader;
@StudyHeader(namespace="extensions.Suk", id="BAR_TEXT", name="BAR_TEXT", label="Bar Text", menu="Suk",
desc="Add text to bar",overlay=true, supportsBarUpdates=false)
public class DisplyText extends Study {
private final static String BAR_FONT = "fontTrendBar";
@Override
public void initialize(final Defaults defaults){
SettingsDescriptor settingsDescriptor = createSD();
SettingTab generalTab = settingsDescriptor.addTab("General");
Font indicatorFont = new Font("Segoe UI Semibold", Font.PLAIN, 8);
Font trendBarFont = new Font("Segoe UI Semibold", Font.PLAIN, 6);
SettingGroup configGroup = generalTab.addGroup("Configuration");
configGroup.addRow(new FontDescriptor(BAR_FONT, "Bar Font", trendBarFont, new Color(250, 250, 250), true, true, false));
}
@Override
public void clearState(){
super.clearState();
}
private boolean showText(final int index, final DataSeries dataSeries,final double L, final double H,final boolean showText,final FontInfo fontInfo,
final boolean showHL) {
if(showText == true) {
Label lbl = new Label("Hi", fontInfo.getFont(), fontInfo.getColor(), fontInfo.getBgColor());
if(showHL) {
lbl.setLocation(dataSeries.getStartTime(index), Math.abs(H));
}else {
lbl.setLocation(dataSeries.getStartTime(index), Math.abs(L));
}
lbl.getText().setShowOutline(false);
lbl.getText().setTextColor(fontInfo.getColor());
lbl.getText().setHAlign(Enums.TextAlign.HCENTER);
addFigure(lbl);
}
return true;
}
@Override
protected void calculate(final int index, final DataContext dataContext){
if(index < 1){
return; //No data
}
DataSeries dataSeries = dataContext.getDataSeries();
if(dataSeries.isBarComplete(index) == false){
return;
}
double openPrice = dataSeries.getDouble(index, Enums.BarInput.OPEN);
double closePrice = dataSeries.getDouble(index, Enums.BarInput.CLOSE);
double highPrice = dataSeries.getDouble(index, Enums.BarInput.HIGH);
double lowPrice = dataSeries.getDouble(index, Enums.BarInput.LOW);
double barBodySize = Math.abs(openPrice - closePrice);
double barSize = highPrice - lowPrice;
double halfBarSize = barSize * 0.5;
boolean isLargeBarIndicated = false;
boolean isCloseHL = false;
Settings settings = getSettings();
FontInfo trendBarFontInfo = settings.getFont(BAR_FONT);
if(closePrice > openPrice)
{
isCloseHL = true;
showText(index, dataSeries,lowPrice,highPrice,true,trendBarFontInfo,isCloseHL);
}
else
{
showText(index, dataSeries,lowPrice,highPrice,true,trendBarFontInfo,isCloseHL);
}
}
}