Here they are as there are few 3rd party examples
BIG UPDATE BELOW which means I got this partially working!!
I tested to add a Redis NOSQL (3rd party) using simple Jedis Jar. This was done fairly easily with another Mac OS based proprietary platform like Dukascopy JForex. I could see the Redis update when running the strategy or study within MotiveWave. This builds fine. but there does not seem debugging log capabilities for a strategy but there is for studies. Also, when making changes in the Java in Eclipse, the MotiveWave platform does not seem to pick up the latest changes  in a dynamically changed class.  The only way for this to be picked up is by reseting the platform.
My opinion but it is looking good but …
I think there needs to a be lot more samples from MotiveWave instead of just 3 simple studies and 1 strategy. I could only find one other 3rd party providing further examples. Unfortunately, I am not  in the business of spinning my wheels to figure this out as compared to other brokers/platform who provide flawless coding experiences. I think I need to see a demo or better examples.
Until then, I am may just use MotiveWave for charting or connecting with IQFeed only. I can do that with the entry level MotionWave edition. This platform is very exciting indeed but I need to get to see improvements in the above area before I get serious with it from a coding point for view.
BIG UPDATE on getting Java coding! (Nov 29)
See the video to see what is working including text writing and CSV reading files
Here is working Java code as hinted in the video
package study_examples;
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.Inputs;
import com.motivewave.platform.sdk.common.MarkerInfo;
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.PathDescriptor;
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.common.desc.ValueDescriptor;
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;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import redis.clients.jedis.Jedis;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/** Moving Average Cross. This study consists of two moving averages:Â
  Fast MA (shorter period), Slow MA. Signals are generated when theÂ
  Fast MA moves above or below the Slow MA. Markers are also displayedÂ
  where these crosses occur. */
@StudyHeader(
 namespace=”com.mycompany”,Â
 id=”MACROSS”,Â
 name=”Sample Moving Average Cross”,
 label=”MA Cross”,
 desc=”Displays a signal arrow when two moving averages (fast and slow) cross.”,
 menu=”Examples”,
 overlay=true,
 signals=true)
public class SampleMACross extends Study
{
 enum Values { FAST_MA, SLOW_MA };
 enum Signals { CROSS_ABOVE, CROSS_BELOW };
 @Override
 public void initialize(Defaults defaults)
 {
try {
File file = new File(“/Users/quantlabsnet/atestfile1.txt”);
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(“This is “);
fileWriter.write(“a test”);
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
this.debug(e.toString());
e.printStackTrace();
}
//https://www.mkyong.com/java/how-to-read-and-parse-csv-file-in-java/
String csvFile = “/Users/quantlabsnet/country.csv”;
  BufferedReader br = null;
  String line = “”;
  String cvsSplitBy = “,”;
  try {
    br = new BufferedReader(new FileReader(csvFile));
    while ((line = br.readLine()) != null) {
      // use comma as separator
      String[] country = line.split(cvsSplitBy);
      this.debug(“Country [code= ” + country[4] + ” , name=” + country[5] + “]”);
    }
  } catch (FileNotFoundException e) {
    e.printStackTrace();
    this.debug(e.toString());
  } catch (IOException e) {
    e.printStackTrace();
    this.debug(e.toString());
  } finally {
    if (br != null) {
      try {
        br.close();
      } catch (IOException e) {
        e.printStackTrace();
        this.debug(e.toString());
      }
    }
  }
// Jedis jedis = new Jedis(“localhost”);Â
//Â Â this.debug(“Connection to server sucessfully”);Â
//Â Â //check whether server is running or notÂ
//Â Â this.debug(“Server is running: “+jedis.ping());Â
Â
this.debug(“hello debug from SampleMACross()”);
Â
  // User Settings
  SettingsDescriptor sd=new SettingsDescriptor();
  setSettingsDescriptor(sd);
  SettingTab tab=new SettingTab(“General”);
  sd.addTab(tab);
  // Fast MA (shorter period)
  SettingGroup ma1=new SettingGroup(“Fast MA”);
  tab.addGroup(ma1);
  ma1.addRow(new InputDescriptor(Inputs.INPUT, “Fast Input”, Enums.BarInput.CLOSE));
  ma1.addRow(new MAMethodDescriptor(Inputs.METHOD, “Fast Method”, Enums.MAMethod.EMA));
  ma1.addRow(new IntegerDescriptor(Inputs.PERIOD, “Fast Period”, 10, 1, 9999, 1));
  // Slow MA (shorter period)
  SettingGroup ma2=new SettingGroup(“Slow MA”);
  tab.addGroup(ma2);
  ma2.addRow(new InputDescriptor(Inputs.INPUT2, “Slow Input”, Enums.BarInput.CLOSE));
  ma2.addRow(new MAMethodDescriptor(Inputs.METHOD2, “Slow Method”, Enums.MAMethod.EMA));
  ma2.addRow(new IntegerDescriptor(Inputs.PERIOD2, “Slow Period”, 20, 1, 9999, 1));
  tab=new SettingTab(“Display”);
  sd.addTab(tab);
  SettingGroup lines=new SettingGroup(“Lines”);
  tab.addGroup(lines);
  lines.addRow(new PathDescriptor(Inputs.PATH, “Fast MA”, defaults.getGreenLine(), 1.0f, null, true, false, false));
  lines.addRow(new PathDescriptor(Inputs.PATH2, “Slow MA”, defaults.getBlueLine(), 1.0f, null, true, false, false));
  SettingGroup markers=new SettingGroup(“Markers”);
  tab.addGroup(markers);
  markers.addRow(new MarkerDescriptor(Inputs.UP_MARKER, “Up Marker”, Enums.MarkerType.TRIANGLE, Enums.Size.SMALL, defaults.getGreen(), defaults.getLineColor(), true, true));
  markers.addRow(new MarkerDescriptor(Inputs.DOWN_MARKER, “Down Marker”, Enums.MarkerType.TRIANGLE, Enums.Size.SMALL, defaults.getRed(), defaults.getLineColor(), true, true));
  // Runtime Settings
  RuntimeDescriptor desc=new RuntimeDescriptor();
  setRuntimeDescriptor(desc);
  desc.setLabelSettings(Inputs.INPUT, Inputs.METHOD, Inputs.PERIOD, Inputs.INPUT2, Inputs.METHOD2, Inputs.PERIOD2);
  desc.exportValue(new ValueDescriptor(Values.FAST_MA, “Fast MA”, new String[] { Inputs.INPUT, Inputs.METHOD, Inputs.PERIOD }));
  desc.exportValue(new ValueDescriptor(Values.SLOW_MA, “Slow MA”, new String[] { Inputs.INPUT2, Inputs.METHOD2, Inputs.PERIOD2 }));
  desc.exportValue(new ValueDescriptor(Signals.CROSS_ABOVE, Enums.ValueType.BOOLEAN, “Cross Above”, null));
  desc.exportValue(new ValueDescriptor(Signals.CROSS_BELOW, Enums.ValueType.BOOLEAN, “Cross Below”, null));
  desc.declarePath(Values.FAST_MA, Inputs.PATH);
  desc.declarePath(Values.SLOW_MA, Inputs.PATH2);
  // Signals
  desc.declareSignal(Signals.CROSS_ABOVE, “Fast MA Cross Above”);
  desc.declareSignal(Signals.CROSS_BELOW, “Fast MA Cross Below”);
  desc.setRangeKeys(Values.FAST_MA, Values.SLOW_MA);
 }
 @Override
 protected void calculate(int index, DataContext ctx)
 {
  int fastPeriod=getSettings().getInteger(Inputs.PERIOD);
  int slowPeriod=getSettings().getInteger(Inputs.PERIOD2);
  if (index < Math.max(fastPeriod, slowPeriod)) return; // not enough data
  DataSeries series=ctx.getDataSeries();
  // Calculate and store the fast and slow MAs
  Double fastMA=series.ma(getSettings().getMAMethod(Inputs.METHOD), index, fastPeriod, getSettings().getInput(Inputs.INPUT));
  Double slowMA=series.ma(getSettings().getMAMethod(Inputs.METHOD2), index, slowPeriod, getSettings().getInput(Inputs.INPUT2));
  if (fastMA == null || slowMA == null) return;
  series.setDouble(index, Values.FAST_MA, fastMA);
  series.setDouble(index, Values.SLOW_MA, slowMA);
  if (!series.isBarComplete(index)) return;
  // Check to see if a cross occurred and raise signal.
  Coordinate c=new Coordinate(series.getStartTime(index), slowMA);
  if (crossedAbove(series, index, Values.FAST_MA, Values.SLOW_MA)) {
   MarkerInfo marker=getSettings().getMarker(Inputs.UP_MARKER);
   if (marker.isEnabled()) addFigure(new Marker(c, Enums.Position.BOTTOM, marker));
   ctx.signal(index, Signals.CROSS_ABOVE, “Fast MA Crossed Above!”, series.getClose(index));
  }
  else if (crossedBelow(series, index, Values.FAST_MA, Values.SLOW_MA)) {
   MarkerInfo marker=getSettings().getMarker(Inputs.DOWN_MARKER);
   if (marker.isEnabled()) addFigure(new Marker(c, Enums.Position.TOP, marker));
   ctx.signal(index, Signals.CROSS_BELOW, “Fast MA Crossed Below!”, series.getClose(index));
  }
  series.setComplete(index);
 }
}
NOTE I now post my TRADING ALERTS into my personal FACEBOOK ACCOUNT and TWITTER. Don't worry as I don't post stupid cat videos or what I eat!